Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Cache #1236

Open
MathieuDomingo opened this issue Dec 13, 2024 · 7 comments
Open

Cache #1236

MathieuDomingo opened this issue Dec 13, 2024 · 7 comments

Comments

@MathieuDomingo
Copy link

Bonjour,

suite à une discussion sur le chat concernant le fichier .vtt, j'ai remarqué qu'il y a un problème de "non utilisation" du cache dans le fichier pod/video/templates/videos/video-script.html , ce qui permet de remonter au hash des utilisateurs 😓
Lignes concernés : 199 et 202 pour le fichier vtt , et lignes 159 et 163 pour les fichiers mp4

@Badatos
Copy link
Collaborator

Badatos commented Dec 16, 2024

Je colle le lien de la ligne concerné :

@Badatos
Copy link
Collaborator

Badatos commented Dec 17, 2024

D’après mes investigations, le risque présenté ici est qu'à partir d'une vidéo V1 appartenant à un utilisateur U1, un utilisateur accède à une vidéo V2 appartenant aussi à l'utilisateur U1 (même si V2 est en accès restreint).
Exemple :
à partir de l'url de la vidéo V1 : 'src': '/media/videos/U1_HASH/V1_ID/360p.mp4',
Il serait possible de reconstruire l'url suivante :
'src': '/media/videos/U1_HASH/V2_ID/360p.mp4',

Mais pour cela, il faut connaitre l'identifiant d'une seconde vidéo du même auteur, ou tester l'intégralité des identifiants jusqu'à tomber sur une vidéo.

@Badatos
Copy link
Collaborator

Badatos commented Dec 17, 2024

Pistes de résolutions possible :

  • Utiliser Pod comme proxy pour servir les vidéos, mais on y perdrait en rapidité, car cela ajoute un intermédiaire (le fichier mp4 n'étant plus accessible via le serveur Web)
  • remplacer les dossiers des id des vidéos par un hash. cela rendrait le passage d'une vidéo à une autre quasi impossible, mais on y perdrait un peu en lisibilité sur le disque en cas de débogage

@MathieuDomingo
Copy link
Author

D’après mes investigations, le risque présenté ici est qu'à partir d'une vidéo V1 appartenant à un utilisateur U1, un utilisateur accède à une vidéo V2 appartenant aussi à l'utilisateur U1 (même si V2 est en accès restreint). Exemple : à partir de l'url de la vidéo V1 : 'src': '/media/videos/U1_HASH/V1_ID/360p.mp4', Il serait possible de reconstruire l'url suivante : 'src': '/media/videos/U1_HASH/V2_ID/360p.mp4',

Mais pour cela, il faut connaitre l'identifiant d'une seconde vidéo du même auteur, ou tester l'intégralité des identifiants jusqu'à tomber sur une vidéo.

Oui c'est ça. J'ai fais un petit test en javascript, pour brutforce ~1k vidéo ça se fait en quelques secondes :-/

Actuellement je ne sais pas exactement comment cela fonctionne, mais j'ai l'impression que la vidéo n'est déjà pas servi directement.
Si je regarde le code source d'une vidéo, pour l'image de base cela passe par un dossier /media/cache et pour la vidéo j'ai un blob avec une url et un hash sans rapport avec le hash de l'utilisateur. (Et je vois qu'il y a également une adresse avec le hash de l'utilisateur dans une ligne avec un commentaire HTML qu'il faudra supprimer pour la même raison que ce ticket)

@Badatos
Copy link
Collaborator

Badatos commented Dec 17, 2024

Oui c'est ça. J'ai fais un petit test en javascript, pour brutforce ~1k vidéo ça se fait en quelques secondes :-/

Actuellement je ne sais pas exactement comment cela fonctionne, mais j'ai l'impression que la vidéo n'est déjà pas servi directement.

Il me semble que si, pourtant.

Si je regarde le code source d'une vidéo, pour l'image de base cela passe par un dossier /media/cache

Oui en effet, les vignettes sont retaillées et placées dans un dossier cache

et pour la vidéo j'ai un blob avec une url et un hash sans rapport avec le hash de l'utilisateur.
(Et je vois qu'il y a également une adresse avec le hash de l'utilisateur dans une ligne avec un commentaire HTML qu'il faudra supprimer pour la même raison que ce ticket)

À quelles lignes vois-tu ces 2 infos ?

@MathieuDomingo
Copy link
Author

MathieuDomingo commented Dec 17, 2024

Je n'ai pas pris le temps de faire le lien avec le code de pod 😓 , je suis juste allé sur la page d'une vidéo et j'ai inspecté le code html de la page au niveau de la vidéo :
Par exemple si je vais sur cette vidéo de lille : https://pod.univ-lille.fr/video/39820-video-testmp4/ :

<video id="podvideoplayer_html5_api" class="vjs-tech" preload="auto" poster="//pod.univ-lille.fr/static/img/default.svg" tabindex="-1" src="blob:https://pod.univ-lille.fr/563053fa-1aec-4178-8f93-599be5661d0e">
  <!-- <source src="/media/videos/HASH_DU_USER/39820/livestream.m3u8" type="application/x-mpegURL"> -->
  <p class="vjs-no-js">
    Pour visionner cette vidéo, veuillez activer JavaScript et envisager de passer à un navigateur Web qui <a href="https://videojs.com/html5-video-support/" target="_blank" class="vjs-hidden" hidden="hidden"> prend en charge la vidéo HTML5</a>
  </p>
</video>

Au niveau du src de la vidéo j'ai bien un blob avec un hash qui me semble "anonymisé", mais la balise "source" en commentaire HTML me semble problématique (j'ai caché le HASH_DU_USER)

Edit : je viens de chercher dans les dossiers de pod , je dirais que c'est cette ligne la :

<!-- <source src="{{ video.get_playlist_master.source_file.url }}" type="{{ video.get_playlist_master.encoding_format }}"> -->

@Badatos
Copy link
Collaborator

Badatos commented Dec 17, 2024

Edit : je viens de chercher dans les dossiers de pod , je dirais que c'est cette ligne la :

<!-- <source src="{{ video.get_playlist_master.source_file.url }}" type="{{ video.get_playlist_master.encoding_format }}"> -->

Bien vu !
Par contre, pour le blob vidéo, il est généré coté client par video.js, mais le fichier video reste bien servi en direct par le serveur web (via

const mp4_sources = {{ video.get_video_mp4_json|safe }};
)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants