Il trouve une faille dans le chat twitch d'un streamer

Durée: 49m15s

Date de sortie: 06/11/2023

Découvrez les offres d'emploi d'Experis : https://bit.ly/Offres-Experis

Merci à eux de nous faire confiance dans le cadre de cette collaboration commerciale !


Manu.js, un développeur bien connu de twitter, trouve une faille dans le chat twitch de Benjamin Code et peut alors prendre le contrôle de son live !


Pensez à mettre 5 étoiles pour soutenir l’émission !


Écriture : Manu.js & Matthieu Lambda



Hébergé par Acast. Visitez acast.com/privacy pour plus d'informations.

A au fait maman merci pour le conseil.
Ah oui lequel ?
Ouvrir un plan d'épargne retraite à la Carac.
Ah oui.
En 2024, le fonds euro de la Carac m'a rapporté 4%.
Mais oui la Carac s'occupe bien de nous et depuis longtemps.
Et nous avons un conseiller en patrimoine dédié qui change tout.
Et jusqu'au 31 mars, la Carac me donne 50 euros si je verse 2000 euros.
Et ça peut aller jusqu'à 1000 euros offert.
A la Carac, on se bat pour vous.
Les taux passés ne préjuchent pas des taux à venir.
Taux net de frais avant prélèvement sociaux.
Offre soumise à conditions, plus d'informations sur carac.fr.
Mutuelle soumise au livre 2 du code de la mutualité.
Imaginez, vous regardez un streamer sur Twitch
et grâce à un seul message dans son chat,
vous pouvez prendre le contrôle de son logiciel de stream.
Vous pouvez alors afficher ce que vous voulez sur son écran en temps réel,
espionner sa webcam potentiellement et même lancer un live
sans même qu'il soit au courant pendant la nuit.
Un live de scam, par exemple.
Bref, les possibilités sont infidies.
Pour n'importe quel streamer, ce serait la pire situation possible.
Et pourtant, cette vision d'horreur, t'es arrivé.

Oui, t'es arrivé.
J'ai eu à faire un hacker bienveillant
qui est resté dans la théorie, dans la démonstration.
Il m'a dit, regarde ce que j'aurais pu te faire.
Filme moi d'études, on s'est arrangé.
Il va vous raconter comment il m'a boloss.
C'est Manu, évidemment.
C'est toi qui a alerté Benjamin de cette potentielle faille
qu'il y avait dans son système de stream.
Avant que tu nous expliques exactement ce que tu as fait,
comment ça s'est passé, comment il faut s'en protéger,
j'aimerais m'attarder sur le concept d'avoir un navigateur dans un live.
Ce dont on va parler, c'est une faille qui concerne un navigateur web,
donc équivalent d'un Google Chrome que vous aurez sur votre ordinateur.
Et pourtant, on est en train de parler de streamer et de Twitch.
Pour ceux qui ne sont pas dans cet écosystème,
ce n'est pas du tout évident qu'il y a un rapport entre Chrome
et les gens qui font de la télévision
ou les gens qui produisent des émissions sur Twitch.
Il y a un lien.
C'est que quand vous y réfléchissez,
ici on est dans un overlaid.
Dites-vous qu'il y a un logiciel qui prend ma caméra,
qui alterne avec les autres caméras,
qui va afficher des illustrations.
C'est un logiciel qui s'appelle un mélangeur.
Il peut être hardware, software, on ne va pas rentrer dans le détail.
Mais c'est un logiciel qui combine tous ces calques
pour faire le rendu que vous obtenez à la fin sur votre écran.
Il se trouve que ces mélangeurs, il y en a plein.
Et le plus connu qui est open source et gratuit,
qui est utilisé par quasiment tous les streamers, c'est OBS.
Open Broadcaster Software.
Et lui, comme beaucoup d'autres, utilise des navigateurs web.
Alors pourquoi ?
C'est quoi l'intérêt de footre-chrome dans OBS ?
En fait, quand vous réfléchissez,
si vous voulez afficher des calques, du texte, des petites boîtes,
des choses jolies, que elles soient animées par exemple,
et qu'elles soient dynamiques,
un chat Twitch, c'est un exemple,
mais des notifications, des alertes sur votre stream.
La météo va ce que vous voulez,
quand vous y réfléchissez,
faire quelque chose comme ça, joli, dynamique,
qui a des animations, voilà.
Très bon exemple.
En fait, oui, depuis tout à l'heure.
C'est un navigateur.
J'ai un peu voulu.
Mais l'avantage...
Je suis sur le maquin.
L'avantage d'un navigateur, c'est qu'on peut afficher,
littéralement, tout ce qu'on peut afficher sur une page web.
Donc l'interface la plus complexe,
l'application la plus complexe que vous ayez jamais vue,
est affichage et est affichable sur cet écran.
Avec de la transparence.
Parce que c'est ça qui rend le truc parfait.
C'est que, autant sur votre navigateur,
vous avez toujours un fond blanc qui vient,
même s'il y a des boîtes transparentes,
ça ne va pas afficher votre fond écran.
Vous allez mettre du charge en site,
il y a ton fond écran de Windows ou de Mac qui est apparaît derrière.
Et bien, sur ces logiciels-là, c'est prévu pour.
On peut faire des interfaces web,
ou derrière ces transparences.
Et ça, quand vous y réfléchissez, c'est l'outil.
C'est la technologie la plus aboutie aujourd'hui
pour faire des interfaces complexes.
Il y a d'autres moyens, mais ça, c'est le mieux.
C'est gratuit, c'est hyper éprouvé.
Et c'est la raison pour laquelle il y a littéralement Chrome.
C'est pas un black-out, c'est le moteur de Google Chrome
qui est dans la plupart des logiciels de mixage vidéo.
Et pour les développeurs frontaines comme moi,
c'est une hausaine parce que justement, je sais tout faire en front.
Et du coup, je peux donner à mes streams,
je peux façonner le stream comme je l'entends,
parce que je peux vraiment tout faire.
Et comme petite illustration,
j'ai un décor qui a été fait en 3D photo réaliste, par exemple.
Et j'en ai une image de nuit de ce décor et une image de jour.
Et en fait, ce que je fais, c'est que dans le browser,
je récupère, enfin dans le navigateur Chrome,
quand je lance mon stream, je récupère l'heure
à laquelle se couche le soleil ce jour-là via une API.
Et du coup, ce que je fais, c'est que quand on arrive à 1 heure
à à peu près 30 minutes de cette heure-là,
je commence à faire une sorte de transition CSS
entre le décor de jour et le décor de nuit.
Ce qui fait qu'en fait, la nuit tombe dans mon décor 3D derrière moi,
enfin dans mon image derrière moi.
– Et tout ça dynamiquement ?
– Tout ça dynamiquement et dans une fenêtre de navigation.
Et ça, c'est un exemple parmi tant d'autres des possibilités.
Et je sais pas si...
– Ben non, justement, c'est ça qui est intéressant,
c'est que t'as un navigateur dans ton stream,
et donc potentiellement, tu peux être vulnérable
à des failles qui peuvent exister dans des sites web.
Puisque comme chacun sait,
faire du développement web que ce soit dans le navigateur ou dans le serveur,
ça peut ouvrir des failles si on fait pas les choses correctement.
Et justement, notre histoire commence par là.
En fait, ça commence, si je dis pas de bêtises,
avec toi Benjamin, qui a une idée d'un concept
à implémenter sur ton stream.
– Absolument.
Mais comme je vous l'ai dit, j'ai un décor qui a été fait par un artiste 3D.
En fait, et donc au final, il m'a livré des JPEG en gros.
Et je lui avais demandé, dans ce JPEG,
sur une étagère, en fait, du décor,
me laisser une sorte de petit écran,
parce que moi, par la suite, je viendrai y afficher des trucs dynamiquement dans cet écran.
Et typiquement, le premier cas d'utilisation que je voulais faire,
c'était afficher le nom de mes derniers abonnés.
Enfin, ouais, le dernier abonnés, en fait,
ils s'affichent dans cette espèce de panneau à l'aide comme ça.
Et donc du coup, comment j'ai fait ce truc-là ?
J'ai récupéré avec la paix de Twitch,
j'ai récupéré le nom du dernier abonnés.
Et je l'affiche dans un calque au-dessus de mon décor 3D,
enfin, de mon image de fond, là, qui change entre le jour et la nuit.
J'ai un autre calque qui est un autre navigateur, du coup, par-dessus.
Et lui, c'est juste, en fait, le nom de l'abonné qui défile en blanc, comme ça,
est stylisé avec du CSS pour donner un effet lumineux,
pour donner un peu ce genre d'effet comme ça.
– Qui soit bien intégré, comme si c'était vrai, en fait.
– Ouais, exactement. Et ça, ça rendait trop bien.
Le chat était en ébullition, ça a été une machine à cache infernale,
parce que du coup, tout le monde s'est abonné pour voir son nom défile.
Non, je rigole.
– Il est là, pour Tile.
– Mais à terme, c'est ça, le projet, c'est de s'enrichir encore et toujours plus, bien entendu.
Mais, à vouloir tout s'enrichir, à vouloir jouer avec le feu,
qui s'y frotte si pique.
Et vous avez, par ici, dans cette pièce des hackers,
intentionnés, bien intentionnés, à vie des cupides,
qui m'a dit, attention Benjamin, j'ai vérifié ce que t'as fait,
t'as fait ton malin sur YouTube, à parler de ton exploit,
d'afficher ton abonné, etc.
Mais, tu pars en couille.
Mais je vais lui laisser la parole, je vais lui laisser expliquer tout ça.
Ça fait partie maintenant de son histoire, de sa légende.
– Ok, un creux de transition, merci beaucoup Benjamin.
Donc, oui, comme vous pouvez le voir là, il y a le tweet,
ou quand j'ai découvert le truc.
Alors moi, comme tout bon abonné à Benjamin Coates,
je regarde ses vidéos en temps et en heure.
Du coup, il a tweeté sa petite vidéo, je suis allé la regarder
et j'étais en train de manger dans mon salon, mon petit saladié de pâte.
Et là, je m'enfilte des pâtes et je vois, qu'est-ce que je vois ?
Je vois un bout de code et bon, moi je suis le doignier du code.
J'ai une exigence inouïe envers le code, mais personnel.
C'est-à-dire, j'en tiens pas rigueur aux autres,
mais c'est un truc que, envers moi, je n'aime vraiment pas faire quelque chose
qui n'est pas... Ouais, voilà.
Ou de vulnérable.
Ou de vulnérable, ou de que je ne considère pas vraiment goût de practice.
Bref, voilà.
Donc, c'est l'idée.
Et du coup, je regarde le code et je grince des dents,
parce que bon, dès que je regarde du code, je grince des dents,
ces maladies, je suis vraiment désolé pour ça.
Et du coup, je vois ce truc.
Et en tant que bon utilisateur de Twitter, bien grumpy,
je vais faire mon petit tweet.
Donc c'est le tweet qu'on voit là.
Salut Benjamin Coates, figure-toi, Gros Nerd, figure-toi que tu as une fight XFF.
Donc voilà, donc là, je fais mon intéressant.
Je lui dis, voilà, machin, nanana, tu devrais utiliser Inner Text au lieu de Inner HTML,
parce que je peux faire, donc là, je balance des claims de fou furieux.
Je lui dis, oui, je peux contrôler ton OBS via la Web Socket et couper ton stream.
Alors là, si je voulais faire un peu plus parlant, je vais lui dire allumer ton stream,
ça fait même encore plus peur que couper ton stream.
Mais bon, voilà.
Donc Benjamin...
Oui, j'ai pas pensé à ce cas.
Imagine, tu es dans ta chambre, tu es tout nu, tu as OBS qui est démarré,
mais tu n'as pas de stream lancé.
Je peux lancer le stream.
Je peux totalement lancer le stream, l'angoisse.
Mais il faut que t'es OBS ouvert.
Voilà.
Mais en général, quand je me fous à poil, je m'assure qu'OBS est fermé quoi qu'il arrive quand même.
J'ai quelques...
J'ai quelques...
La caméra, le drapeau, tout.
Donc bref, voilà, c'est l'idée.
Mais alors, comment c'est possible ?
Parce que tu as un simple navigateur dans un logiciel, alors...
Exactement.
Surtout moi, je te dis, attends mec, tu fais ton malin, là,
mais il va falloir assumer tes trucs, là, parce que tu m'affiches là,
mais maintenant, vas-y.
C'est simple.
Surtout tout ce dont on a parlé, pour l'instant, c'est d'afficher des choses sur un calc.
Oui.
Alors le lien avec démarrer éteint d'un stream, pour l'instant, il est très loin.
Il est extrêmement...
Alors, en gros, dans l'idée, c'est que moi, de base, je disais ça parce que je connais la théorie.
Et je sais que théoriquement, c'est possible.
Mais la réponse, de main-jama, elle m'a un peu surpris,
parce que moi, je suis là pour faire mon malin et tout machin.
Mais lui, direct, il a pris ce ton de...
Bon, et bien, vas-y maintenant, assume.
Pirate-moi, là.
Et donc là, je n'avais pas prévu ça parce que moi, je suis un gros flemmard.
Et du coup, je me dis, en fait, j'ai la flemme quand même,
mais là, maintenant, il faut que j'assume parce que j'ai fait mon tweet.
Il y a plein de gens qui l'ont vu et tout machin, il y en a une.
Il faut que j'assume, en fait, je suis obligé de pirater par-jama,
parce qu'il me dit, pirate-moi.
Et là, c'est soit je passe pour un coup, soit je le pirate.
Du coup, on a fait tout ce qui était possible pour pirater par-jama.
Et du coup, je suis arrivé...
D'accord, nous.
Voilà. Donc là, on commence dans l'histoire.
Alors du coup, de base, de base, cette faille en question,
la faille dont je parle, que j'ai identifiée,
c'est pas une faille XSS.
Donc c'est une faille uniquement frontaine, à priori.
Et du coup, ça permet d'injecter du JavaScript
dans le site de quelqu'un d'autre, XSS.
Ça veut dire cross-site scripting.
Et en fait, le nom est un peu historique.
Aujourd'hui, tu pourrais te dire que ça s'appelle HTML injection.
Tu vois, c'est beaucoup plus parlant si je te dis HTML injection.
C'est-à-dire que tiens, je suis capable de t'envoyer du HTML
et il va atterrir dans ta page à toi.
Et donc, il va être interprété par le navigateur.
C'est-à-dire que si je mets un titre,
ou que je dis ce titre étant un grand machin, il va s'afficher en grand machin.
Ça va pas afficher les balises, il va être interprété.
Est-ce que tu peux essayer de faire un exemple
pour quelqu'un qui n'est pas développeur du tout ?
Pour quelqu'un qui n'est pas développeur du tout.
Alors j'ai même carrément un petit vidéo
qui est en fait normalement un gif.
Donc je pense que la régie devrait la player en boucle.
Du coup, c'est l'idée.
Donc j'ai fait un petit site où j'ai deux manières
d'intégrer une chaîne de caractère dans une page.
La première manière, c'est en l'intégrant en tant que texte.
C'est-à-dire que quand j'écris du HTML,
c'est avec des balises un peu comme sur les forums à l'époque
avec les crochets et tout.
La première manière, ce qui va se passer
si je n'ai pas de failles XSS,
on va voir les balises apparaître sur le site.
C'est-à-dire qu'on va voir le chevron machin,
on va voir tout mon langage de balises.
C'est la deuxième ligne qu'on a avec écrit
Inner Texte en dessous, on voit qu'il y a la balise de Strong.
Parce que là, le texte est pris en compte.
Et maintenant, la ligne du dessus avec Inner HTML,
on voit que là, c'est en gras.
Et du coup, c'est en gras pourquoi ?
Parce que là, le navigateur a décidé d'interpréter
cette balise Strong en tant que ok, c'est dû HTML.
Donc je l'interprète, Strong, ça veut dire mettre en gras.
Donc je mets en gras, ok ?
– Et donc, c'est en fait toi qui connaît la langue
qu'utilise les navigateurs pour afficher des éléments
et rendre des choses dynamiques.
Tu l'intègres dans, je sais pas,
dans le message du chat Twitch par exemple.
– Exactement. – Et tu mets ton Strong.
Et donc chez Benjamin, ça aurait littéralement
mis le texte en gras. – En Strong, exactement.
C'est littéralement ça.
T'as tout compris, je parle de l'HTML.
– Correusement. – Et du coup, oui, c'est l'idée.
– Et donc, évidemment, pour ceux qui ne savent pas,
tu peux pas seulement mettre des choses en gras
ou en Italique, etc., tu peux faire beaucoup plus.
– Ça, c'est le cadeau de mes soucis.
Que tu mettes un texte en gras dans mon stream,
vas-y, frère haut, tu peux y aller. – Je t'ai bien eu !
Mon pseudo est en gras !
– Wow, vas-y.
Du coup, dans l'idée, voilà, c'est ça.
Donc, ça, si vous voulez, c'est le contexte,
la primisse de la faille.
Maintenant, le problème, c'est quoi ?
C'est que le HTML, dedans, dans ce langage de...
– De balisage. – De balisage, merci.
Je sais vraiment pas voulu dire programmation.
Dans ce langage de balisage, on peut aussi mettre
des balises de script pour après faire de la programmation.
Donc, programmer des trucs, donc récupérer,
coder des trucs en JavaScript littéralement.
Donc, en fait, en soi, ça veut dire quoi ?
Ça veut dire que si je peux mettre une balise Strong,
je peux mettre une balise script.
Et si je peux mettre une balise script,
je peux écrire du JavaScript.
Et si je peux écrire du JavaScript,
je peux écrire du JavaScript dans la scène de Benjamin Code,
là où il y a son panoled.
– Ce qui, pour Aztetab, là, me fait même pas peur encore.
C'est pour ça, en plus, je te dis, mec, vas-y, au pire, je m'en fous.
Tu vas afficher un petit bonhomme qui danse sur mon truc.
– Si on réfléchit au pire actuellement,
enfin, si on essaie d'imaginer le pire qu'il peut faire,
si c'est juste de l'esthétique,
c'est, par exemple, mettre une image gigantesque dans le navigateur.
– Pour afficher une image porno pendant mon stream, par exemple,
et me faire ban de Twitch.
– Par exemple. – Ce qui est quand même...
Oui, ce qui est quand même pas rien.
– Vous faire sa pub ou un scam,
ou pour l'instant, c'est des choses comme ça.
Si c'est juste esthétique,
à priori, c'est que ça.
– C'est simple. – Mais c'est pas qu'esthétique.
– Alors, c'est pas qu'esthétique,
du coup, oui, on peut taper du code.
Alors, je connais un petit peu OBS
et le setup avec Chromedt ou machin,
parce que j'en fais un peu chez moi aussi,
la même chose que toi, avec ton panoled, finalement,
c'est un univers que j'aime bien bidouiller également.
Du coup, je sais dans quel contexte
elle run cette page Google Chrome dans OBS
et du coup, je sais à quoi j'ai accès,
parce que je l'ai expérimenté.
Donc c'est un peu un coup de chance, on va dire.
Et du coup, c'est ça que je décris dans mon tweet,
c'est que je sais que techniquement,
il y a une connexion qui se fait entre cette page web et OBS.
C'est-à-dire qu'OBS, il met à disposition de toutes les pages web
qui run dans le logiciel,
il leur met à disposition un serveur de web socket
pour échanger des messages.
Donc ça peut échanger des messages tels que
oui, change de scène,
caler le nom de la scène courante,
voilà, la résolution de machin,
l'emplacement de mes éléments et ce genre de trucs.
Donc en fait, à partir du moment où tu peux dialoguer avec OBS,
a priori, c'est gagné.
Sauf que, comme vous allez le voir et que je vous expliquez maintenant,
c'était pas aussi autoreau,
t'es facile que ça.
Donc là, on pourrait se dire,
c'est bon, en fait, on a trouvé la file XSS,
tu mets ta balise script dans le chat,
tu mets ton code JavaScript,
et c'est fini, mais absolument pas.
C'est pas trop plus logiciel.
Voilà, ça, ça serait dans un monde idéal.
Sauf que, en réalité, les navigateurs,
ils sont totalement au courant que
les XSS, c'est quelque chose qui existe.
Donc en fait, il y a plein de flags de sécurité
et plein de choses qui font que,
non, si en plein milieu de ton site,
d'un coup, il y a une balise script qui pop
en plein milieu, dans une div random au milieu,
je vais pas l'exécuter.
Donc Rome, il n'exécute pas cette balise script.
À moins que tu le démarres
avec une setting,
donc on appelle un flag,
donc un flag pour dire, je désactive explicitement
toutes les sécurité.
Évidemment, Benjamin Code n'a pas démarré son OBS
en disant, je désactive explicitement
toutes les sécurité.
Donc je suis déjà plus ou moins
dans la sauce.
Assumer ta tête.
Je suis dans la sauce.
Je peux déjà plus assumer la taille,
je peux déjà plus.
Donc là, c'est compliqué.
Du coup, ce que je fais,
je commence à faire des recherches
sur comment est-ce que je peux contourner
cette sécurité de Chrome,
mais tu t'en doutes,
je suis pas le seul pignou d'Internet
à être en mode comment contourner la sécurité
Chrome que tout le monde a envie de contourner.
Voilà, c'est un peu chiant.
Mais au final,
j'ai réussi à contourner cette sécurité
sans trop de galère,
c'est même pas vraiment,
j'ai trouvé un tuto,
c'est vraiment juste en essayant des trucs
un peu au pif,
et je me suis souvenu que je pouvais exécuter
du Java Script 100 mètres de balise script.
Donc du coup,
je n'ai pas besoin de...
Dans un élément.
Voilà, je n'ai pas besoin de mettre
mon Java Script dans un élément script
et donc en fait, la sécurité de Chrome,
j'ai supposé à ce moment-là
qu'elle était à ce niveau-là,
elle était en mode
il ne va pas exécuter,
c'est tout ce qu'il y a dans ma balise script.
Mais je peux écrire mon Java Script ailleurs, notamment.
Là, je t'ai un peu choqué du hack
de ça, que tu puisses faire ça.
En fait, je vous dis,
mais en fait, la sécurité XSS,
elle n'existe pas,
si tu peux la contourner aussi facilement.
C'est quoi ce bazar, quoi.
Ouais, c'est vraiment un problème.
Mais en fait,
on est obligés de rester dans cet état-là
pour la rétro-compacte.
Donc c'est-à-dire,
pour ne pas péter des vieux sites
qui marchent encore
avec ce genre de technique de développement,
on ne veut pas dire, bon,
bah, du relance de main,
bah, ce qui marchait avant, ça ne marche plus.
Donc en fait, voilà,
on a toujours cette espèce de zone grise
où il faut que les trucs
qui marchaient avant marchent encore,
mais dans le côté,
on essaie de bien fermer la sécurité
surtout.
Donc c'est aussi compliqué pour Chrome,
donc on ne leur en veut pas,
ils ne vont pas désactiver les fonctionnalités.
Et du coup,
cet endroit-là
où je peux taper du Java Script,
c'est dans les attributs des éléments.
Donc notamment,
par exemple, quand on clique sur un bouton,
il y a un attribut qui s'appelle OnClick,
et dedans, tu peux taper du Java Script.
Et du coup, tu n'es pas dans ta balise Script,
tu es vraiment dans ta chaîne de caractère OnClick.
Du coup, bon,
c'est le premier truc que j'ai essayé,
sauf que c'est pas hyper malin,
parce que j'ai ajouté un bouton
dans l'overlet de Benjamin,
et bon, il fallait qu'il clique dessus
pour se faire pirater.
Donc en fait, au début, il y avait...
Clique ici, STP.
Clique parce que là,
je ne peux pas trop te pirater,
c'est un peu chiant.
En vérité, en plus,
je n'ai même pas accès
à ce navigateur-là.
Ah, peut-être que tu peux y accéder.
Il y a un bouton interdit.
Il n'y a rien pour interagir,
mais il faut y chercher, ouais.
Il aurait dû être très persuasif.
Ouais, ouais.
Ouais, voilà.
Donc si je devais te convaincre
de tout au pirater,
ça aurait pas trop marché.
Et du coup, il y a un deuxième attribut
un peu similaire à OnClick,
mais qui lui ne requiert pas,
du tout, que quelqu'un clique.
C'est OnLoad,
donc c'est au chargement,
et c'est sur la balise IMG,
la balise des images.
Il y a l'attribut OnLoad.
Et donc en fait,
si je balance une image sur ton site,
donc je fais une petite balise IMG,
dans le chat de Twitch, pardon,
je l'envoie,
je mets dans mon attribut
OnLoad un petit bout de JavaScript
qui dit coucou.
C'est bon, ça passe,
puisque l'image va être chargée,
Chrome va charger OnLoad,
et donc il exécute mon JavaScript.
Trop stylé.
Et simplement comme ça, finalement,
on va contourner.
Ça paraît vraiment
le rapport,
la sécurité de Chrome de fou
pour les XSS,
avec la solution,
juste, tu mets OnLoad.
C'est fou quand même de se dire
qu'il y a un tel...
Oui, en fait, je pense que
ils l'ont mis
pour attraper les petits cas
où c'est possible,
mais en fait, il faut considérer
que de base,
si tu exécutes du HTML
en fermant les yeux,
c'est ta gueule, en fait.
Exactement, c'est plus ou moins ta faute.
C'est ton problème, quoi.
Voilà, c'est ça.
Après,
j'en veux pas un Benjamin Code.
Vraiment,
personne ne lui en veut,
parce qu'en réalité,
des failles XSS, c'est hyper courant.
Carément.
Je peux vous sortir
deux exemples qui sont sortis
il y a pas longtemps.
Par exemple,
il y a un plugin WordPress
qui s'appelle Lightspeedcache,
je crois.
Ça n'a même pas besoin de checker mes notes.
Je suis trop joli.
Lightspeedcache,
c'est un plugin WordPress
qui rajoute du cache, en fait, tout simplement.
Et lui,
il avait une faille XSS,
donc 4 millions de sites vulnérables.
Et ça, ce que je vous dis là,
c'est à date de...
C'est soit moi-ci, là,
c'est même peut-être la semaine dernière.
Donc vraiment, les failles XSS,
c'est quand même quelque chose
d'encore hyper courant.
On a aussi eu TinyMCE,
pour ceux qui y connaissent.
C'est un éditeur WeezyWigs.
C'est un peu...
Un éditeur WeezyWigs,
pour la faire courte, c'est...
C'est Google Doc.
C'est Google Doc.
Trop bien, merci.
Je l'aurais pas fait plus courant.
C'est Google Doc.
Et du coup, ça aussi,
pareil, faille XSS,
dans cet éditeur WeezyWigs,
hyper connu,
TinyMCE,
et pareil,
l'impact, il se situe
à plusieurs centaines de milliers
d'utilisateurs.
Tu n'es donc pas seul.
Non, et puis,
je ne vais pas vous mentir,
moi, à ce moment-là,
et puis, on aura l'occasion
de revenir un peu
sur pas mal de choses,
mais à ce moment-là,
quand je développe ce truc-là,
je me dis, mais attends,
mais c'est un truc
qui va être dans mon stream
sur ma machine.
Donc, c'est pas le moment
où je lève les armes
contre les failles XSS.
Je me dis, mais de toute manière,
personne m'a interagir
avec ce truc, ça reste chez moi.
Il fallait penser
que les gens pourraient interagir
dessus, grâce au chat.
Enfin, bref,
c'est une singerie,
en fait, ce truc,
un peu à l'ambicain.
Donc, à ce moment-là,
tu vois, quand je travaille
pour un client,
un truc comme ça,
je suis un peu plus
en mode WeezyWigs.
À un moment,
j'ai mon cerveau qui s'enclenche
sur la partie sécurité,
en mode, fais un peu attention.
Là, j'étais en live-tweet,
en plus, quand j'ai des trucs-là
et tout,
donc je l'ai fait un peu
avec le cul.
Et sans mettre
tous mes boucliers en l'air,
on va dire, quoi.
Non, mais franchement,
on se sent bien perso,
personne te jette
l'âge dessus.
Du coup, oui,
vraiment, c'est ça.
C'est vraiment,
il y a un ratio
qui fait très bizarre.
Du coup, je sais plus.
C'est un film derrière,
parce qu'il y a des gens
dans le chat qui essaient,
mais il a actuellement...
Il y a des tips
et le world.
Franchement, on pouvait essayer
dans le chat,
peut-être que
Underscore est vulnérable au faillis XSS.
Fichot au 4 chats,
nulle part, mais...
C'est ça.
Ça, si, gabbain,
il affiche quelque chose quand...
C'est fini.
C'est fini, ça.
Il a un premier saison,
mais actuellement, c'est pas le cas.
Ah, je suis un vieux.
Il est ancienne.
Du coup, voilà.
Donc, en fait,
on est partis de cette faillis XSS.
Et du coup,
on me l'a...
Juste pour reboucler,
parce que, là,
tu nous expliquais

Exactement.
Donc, t'envoies
ce qui est une image.
Oui.
J'imagine que tu peux faire en sorte
que ton image, elle fasse un pixel
et qu'on la voit pas, par exemple.
Oui.
Je m'en fous, j'ai mis un gros chat.
C'est aussi possible de l'appuyer.
Et donc, concrètement,
tu vas, à partir de là,
c'est ta porte d'entrée
sur la page
qui tourne dans OBS,
qui tourne sur la machine de gabbain.
Exactement.
Non.
Sur la machine de gabbain.
De la machine de gabbain.
Allons-y.
Ce qui veut dire que, pour l'instant,
tu es dans un environnement très contraint.
Je suis très clos
et ce n'est pas du tout gagné.
Alors, bien sûr,
je peux faire des Hello World
et des trucs comme ça,
comme on voit dans le chat.
Mais comment...

Voilà.
Comment on arrive après ?
Exactement.
Donc, c'est ce que je disais tout à l'heure
avec la WebSocket d'OBS.
WebSocket, mais à disposition...
WebSocket.
OBS, mais à disposition,
pardon, cette WebSocket.
Sauf que ce n'est pas gratuit non plus.
Parce que cette WebSocket,
il faut aller dans les settings d'OBS
et l'allumer explicitement.
Des fois, il y a un mot de passe,
des fois, il n'y en a pas par défaut.
Alors, j'ai fait des tests
et en instant l'OBS plusieurs fois
sur ma machine,
en restant les configs des millions de fois,
c'était hyper chiant.
Je me suis rendu compte que,
selon les versions d'OBS que tu prends,
par exemple, sur Linux,
dans un paquet flat pack, fin bref,
des trucs complexes,
des fois, ce mot de passe par défaut
et donc, c'est le cas comme ça.
Donc, moi, du coup,
ce que je vais pour pirater Benjamin,
en réalité, c'est que j'ai reproduit
le même environnement que Benjamin.
Donc, j'ai regardé sa vidéo du panoled
et j'ai recodé son petit panoled chez moi,
un environnement basique du truc
et je me le suis mis dans mon OBS
pour pouvoir faire mes tests tranquilles
et pas aller l'emmerder
sur son chat.
Surtout que t'as tellement bataillé
que j'aurais dû être de l'autre côté du fil
avec toi.
Exactement, voilà.
Il aurait fallu que tu laisses ton OBS
ouvert tout le temps.
En plus, au moment là, j'étais au Japon
et je faisais ma d'autres évitades
et je t'ai tranquille.
Non, je n'étais pas...
Non, je n'étais pas...
Tu es vraiment très chiant.
Oui.
Du coup, comment je me connecte à OBS?
Donc, il y a cette web socket
qui est mise en place.
J'essaie de voir si je peux me connecter.
Alors, il se trouve que chez moi,
elle est allumée par des fausses en mode passe,
donc j'ai vraiment de la chance.
Alors, ça dépend parce que j'ai deux OBS chez moi
et un des deux c'était le cas.
Du coup, je me connecte
et c'est hyper chiant
parce qu'en fait, ça ne marche pas.
J'essaie d'envoyer un message,
je tape du JavaScript
pour me connecter à cette web socket d'OBS
et ça ne marche pas bien
et ça ne marche même pas du tout
et je ne comprend pas ce qui se passe.
Et là, ça fait déjà plusieurs heures
que j'y suis.
Il est 3 heures du mat'
et je vais me coucher, quoi.
Je vais me coucher, je galère, je suis en mode.
La nuit porte conseil.
La nuit porte conseil, c'est ça.
Alors, la nuit porte conseil
mais en réalité, les conseils
sont venus d'une source extérieure.
Du coup, quand je faisais ça,
j'étais sur Discord en duplex
avec mes petits potos sur Discord
et eux, ils se posent,
ils sont autant frustrés que moi
du fait que ça ne marche pas.
Donc, quand je reviens le lendemain,
finalement, il y a quelqu'un qui me sort une info,
comme quoi,
OBS, il faut le dire bonjour.
Si tu ne le dis pas bonjour,
ils ne te répondent pas.
Donc, c'est ce qu'on appelle un handshake
et j'avais pas fait le handshake,
et que j'avais pas dit bonjour.
Du coup, voilà, vous connaissez la suite.
Je n'ai pas dit bonjour.
Donc, je me suis fait avoir.
Donc, ce qui se passe, c'est que,
du coup, on en arrive là,
j'ai mon proof of concept.
Alors, je ne sais pas encore à ce niveau-là
si je peux allumer ta webcam,
si je peux faire quoi que ce soit,
mais je peux parler à OBS
à partir d'un message du chat Twitch.
Donc, je me dis, ok,
la saagance va être vraiment très chiant
de taper mon JavaScript
pour me connecter à la Web Socket
dans la tribu onload de l'image,
on le rappelle, machin.
Trop chiant.
Donc, je me suis littéralement fait un dashboard
pour pirater Benjamin.
Donc, je me suis fait le charnement.
J'ai rien demandé à personne
et j'ai le plus gros acharné du monde
sur les épaules.
Enfin, si, je l'ai un peu provoqué
sur Twitter quand même.
Je m'en cherchais.
Oui, c'est vrai.
Du coup, là, j'ai l'image.
Je pense que la régie, elle va la sortir.
C'est du auto-hack.
De streamer.
Oui, vraiment.
Du coup, je me suis fait un dashboard spécial.
On va démonter Benjamin Code.
Donc, je me suis mis en bas
la petite prévieuse de son stream,
son chat à droite.
Et en haut, je me suis mis une petite boîte
dans laquelle... Voilà, c'est le truc ici.
Là, la petite boîte en haut
dans laquelle on voit document body, machin, et nanas.
C'est là où je peux taper mon JavaScript.
Et à droite, je me suis mis des boutons.
Et en fait, ça va directement communiquer
avec la paye Twitch en utilisant mon compte.
Parce que, du coup, moi, je l'ai axé.
Et ça envoie automatiquement le message
dans son chat Twitch,
dans l'attribut onload de la balise IMG
en remplaçant les guillemets, les parenthèses
que j'ai pas droit d'utiliser, machin, et nanas.
Bref, voilà. Donc, je filtre les inputs,
je fais les trucs, machin.
Voilà, donc je me suis fait mon petit...
T'as un temps réel, tu peux contrôler
le navigateur de Benjamin.
Ben, je me suis fait...
Ouais, ouais, je me suis fait un truc
pour contrôler son overlay,
le dashboard de contrôle de l'overlay.
Ouais, exactement.
Du coup, j'ai mis mes boutons, voilà,
pour directement envoyer le message dans le chat,
le copier, tout ça, machin.
Et à partir de là, c'était un peu plus l'autoroute.
C'était vachement plus facile pour moi.
Parce que j'ai plus...
Tous les anciens problèmes que j'ai eu,
ils sont derrière.
Je me suis codé la technologie,
qui me les abstrait.
Donc, maintenant, les nouveaux problèmes,
c'est quoi ? C'est trouver exactement
quel message pour envoyer AOBS
pour démarrer la webcam,
changer la chaîne, machin, nanas.
Donc, c'est un peu chiant ça aussi.
Il faut lire de la doc et tout.
Parce qu'en général, aujourd'hui,
quand on veut faire ça, on utilise des librairies
qui finalement font la tombe au lit pour nous, quoi.
Donc, tu as une petite fonction,
change scène.
Et voilà. Mais là, moi, je n'ai pas de librairie.
Je peux pas charger une librairie
dans la tribune on-load de l'image.
Tu te doutes bien.
Je discute directement
avec la WebSocket, quoi, de...
de d'OBS.
Alors, en vrai, t'aurais pu.
J'aurais pu avec Dynamique Importe.
Ouais, ça t'aurais pu, j'ai écouté.
J'aurais pu, j'aurais pu.
Mais je me suis dit, je suis déjà assez acharné
contre ce poste Benjamin.
Voilà, il faut que j'y aille, quoi.
Donc, du coup, voilà, je me suis...
je me suis préféré des messages.
J'ai mis aussi des bout de code...
La réglise, si vous voulez les montrer,
voilà, c'est les messages que j'écris
dans la WebSocket
du OBS de Benjamin
pour dire, ben, envoie-moi la liste
de toutes les scènes que t'as dans ton OBS.
Est-ce qu'il y en a une où je vois,
moi, je regarde manuellement,
il y en a une qui s'appelle Webcam Ben,
je suis en mode bon, ben, c'est sûrement
la Webcam de Ben, en fait.
Donc, on va changer de scène.
Il est en train de t'espionner, donc,
c'est-à-dire qu'il fait la liste de toutes les scènes.
Voilà, c'est ça, je suis en train de lister
toutes les scènes qui a...
toutes les scènes, toutes les sources,
toutes les settings qui a dans l'OBS, en fait, finalement.
Et comme ça, moi, je peux regarder derrière
et me dire, ok, je veux aller là,
je veux aller là, ou je veux aller là.
Où est-ce que tu la vois la liste,
dans la vidéo.
L'exemple que moi, j'avais utilisé, c'était
carrément, je le mettais la chaîne de caractère
dans ta page, dans ton overlay.
C'est-à-dire que là,
où on a très de république en haut,
ben, hop, je mettais le nom des scènes,
j'éditais ton overlay.
Mais ça, ça marche seulement si t'es en stream.
C'est-à-dire que si t'es pas en stream,
moi, je n'ai pas le retour visuel
de ce que j'essaie d'avoir, tu vois.
Donc, une méthode pour ça
que je n'ai pas fait parce que j'avais la flemme,
c'est de, en jeu à script, tout simplement,
tu as une fonction qui s'appelle fetch,
tu peux envoyer des infos.
Tu t'envoies une requête.
Tu t'envoies une requête
avec tout le gizon que tu veux dedans,
tu dumpes toutes les settings d'OBS,
sur mon server à moi.
Oui, tu t'envoies sur un serveur quand même.
Ouais, c'est ça, c'est ça.
C'est un chat entre toi et...
C'est ça, c'est ça.
Donc, voilà.
Je suis un piraté.
C'est ça, c'est ça.
Donc, en fait, c'est le malade mental.
C'est la charnée, ouais.
Du coup, voilà, donc là,
j'ai la liste des sources et tout.
Donc, je peux,
finalement, aller checker,
changer de scène
et aller sur la scène web cam.
Et si jamais il se trouve
que Benjamin est pas en ligne
à ce moment-là,
je demande à OBS
de start le stream.
Et j'imagine que Benjamin,
quand tu arrêtes de stream,
tu ne vas pas, dans OBS,
effacer toutes les settings.

De live, ouais.
Si on clique start stream,
ça start le stream sur ta chaîne,
à priori.
Par contre, je quitte OBS.
Tu quitte OBS,
ça va, je ne peux plus rien faire.
C'est ça.
C'est l'idée.
Donc, oui, en réalité,
ces failles XSS,
il y a un problème courant sur les sites.
C'est que, ben,
ça ne marche vraiment que
quand l'utilisateur est encore sur le site.
Donc, il n'y a pas de notions
de persistance ou quoi que ce soit.
Alors, bon, il y a des frameworks
et des librairies
pour exploiter des failles XSS
pour tenter de se persister
des connexions des trucs comme ça.
Mais, en général,
tu quittes la page, c'est fini.
Du coup, ben, là, c'est l'idée.
Si tu quittes OBS, c'est fini
puisque quitter OBS,
c'est quitter la page.
Mais, dans OBS,
t'as 7 settings-là
qui fait que
t'es pas non plus obligé de rester sur la source de ton overlay pour qu'il soit chargé en mémoire.
Donc en fait ça dépend de la setting que tu as mis là.
Ça il me le faut ça, il faut que je l'active.
Ça évite le flash.
Exactement, il évite le flash, cette setting elle sert à ça.
Ah putain trop bien.
Donc voilà, tu vois t'as envie de l'activer là.
Ah ouais de ouf, attention.
Non non je m'en fous.
Mais normalement tu as pensé le truc pour que ce soit bon.
Voilà.
Et je pense qu'il y a un truc qui est intéressant à rajouter.
C'est que là on a parlé de la manière dont à partir d'OBS,
tu as réussi à discuter avec le système de discussion d'OBS qui sont les websockets
et qui permettent à peu près n'importe quel outil par exemple un stream deck.
C'est en général c'est comme ça que ça marche.
Vous savez les petits pads avec des boutons c'est la manière dont on peut contrôler le stream
c'est via cette interface là.
Et la raison pour laquelle ces deux choses ont pu communiquer entre elles
c'était que les deux sites étaient hébergés localement.
Enfin ces deux interfaces de connexion étaient locales sur la machine.
Si je dis pas de bêtises ça veut dire que a priori n'importe quel autre service local
non sécurisé tu aurais pu discuter avec.
C'est pas le fait que ce soit local soit le problème là.
C'est pas le fait que ce soit local.
Le code dit pas le problème.
Mais serveur d'OBS et un serveur local qui écoute la discussion.
Exactement.
C'est le même domaine en gros.
Exactement et du coup a priori tu comprends.
J'ai plus ou moins accès au réseau de la maison de Benjamin.
Et donc tiens bonne question ça.
Je me demande si ça sort.
En fait je me dis que oui.
Non mais t'as peut-être raison.
Ou j'ai peut-être tort.
Ouais si le chat le sait.
Quand tu es sur un domaine tu peux pas sortir.
Je pense en vrai je pense.
Parce que je peux sortir sur un domaine je peux faire youtube.com ou quoi.
Mais est-ce que du coup je peux faire une IP local ?
Une IP local c'est pas autorisé quand tu es dans un depuis un domaine.
Mais tu penses à un local ?
Exactement.
Quand tu es un local je pense c'est bon.
Bon on va vérifier ça.
On vous dira si jamais celle qui a enfreint une explication pas trop moldue.
Mais l'exemple que j'allais donner c'est que typiquement
t'as des applications qui ouvrent des serveurs sur ta machine.
Par exemple nous on utilise un truc qui s'appelle companion.
Bitfocus companion qui est un genre de super gestionnaire
qui permet de contrôler OBS, des streamdakes etc.
C'est un peu l'outil qui est dans toutes les régies de audio et vidéo.
Et là on parle plus que de Twitch.
C'est à dire que vraiment tu vas dans à peu près n'importe quelle régie de prod
même de télé ou autre.
Il y a très souvent ce logiciel là qui en général est disponible sur le réseau.
Et si il est mal sécurisé ce qui est souvent le cas qui n'a pas de mode passe
ça veut dire que tu peux en faire ce que tu veux à partir du moment où tu es chez Benjamin.
Exactement.
Donc les possibilités sont vraiment insane.
Les possibilités sont assez vénères.
Voilà il faut juste après voilà c'est une question d'acharnement littéralement
parce qu'on est quand même en train de...
C'est pas comme si j'étais sur ma propre machine
et que j'avais le terminal et que je pouvais explorer tout le réseau facilement.
C'est à dire que là je dois me faire des scripts pour explorer le réseau
qui en fait sont des scripts qui sont en JES dans la page.
Donc ça peut vite être lourd mais ouais effectivement je pense que niveau possibilité
ça peut aller très loin.
En fait souvent l'assomption, comment on dit la supposition
qui est mauvaise et que les gens se font c'est...
Bon bah je suis dans mon réseau local donc je n'ai pas besoin de sécuriser
car je suis seul dans mon réseau local.
Encore en réalité du coup si tu pars de ce principe là
ça veut dire que le jour où il y a quelqu'un dans ton réseau local
bah il a autant de pouvoir que toi.
Alors que si tu traites ton réseau local comme un réseau public
et que tu te dis bon bah là même si je suis en local pour accéder à ça
j'ai besoin d'un token, j'ai besoin d'un mot, j'ai besoin d'un ennemi.
Le jour où il y a quelqu'un dans ton réseau local
il ne peut pas faire ce qu'on appelle la privilège d'escalzion.
C'est à dire qu'à partir de un droit
tu grattes plus de droits, plus de droits, plus de machins.
Voilà et c'est l'idée là c'est un peu ce qui s'est passé.
Qu'est-ce qu'on peut dire au streamer
pour pas que ça leur arrive et qu'ils ne se fassent pas pireter leur machine ?
Ce qu'on peut dire au streamer pour pas que ça leur arrive
et qu'ils se fassent pas pireter leur machine.
Euh alors...
Faites pas trop d'intégration...
Voilà c'est ça, si vous êtes streamer en développeur
et que vous faites des intégrations avec OBS
ce qui est le cas d'énormément de streamer en développeur
pour le coup je suis pas mal de gens dans le monde de la tech
et du stream et tout.
Et je connais presque pas de streamer développeur
qui s'est pas dit trop bien
je vais me faire mon overlay en web parce que je sais faire du web en fait.
Ça n'existe pas en fait.
Donc voilà, donc il y en a même qui créent des boîtes sur ça
donc on l'a vu tout à l'heure avec Streli
qui sont des amis de Benjamin Code qui font comme Streamlabs.
Donc on a Streamlabs, on a StreamElements, on a Streli, Machinina.
Bref c'est vraiment...
C'est pas non plus signige que ça finalement.
Je jouais pas avec le feu en gros.
Voilà c'est ça, je jouais pas avec le feu.
Attention si vous connaissez votre propre solution
il faut faire, il faut réfléchir à tous ces trucs là quoi.
Il faut réfléchir à ce niveau de sécurité.
Donc les mots de passe sur la web socket c'est bien les niveaux de droit
parce que du coup maintenant dans OBS
il y a des niveaux de droit sur la web socket machin.
C'est bien de check aussi de voir qu'est-ce qu'on peut faire.
Et voilà juste attention si vous codez vos propres trucs.
Vraiment fière fête.
Gaffe ou même si vous utilisez.
Parce que le truc c'est que là on a l'air de mettre l'en face
sur le fait que là le problème c'est vraiment d'avoir codé son propre truc.
Mais comme j'ai dit de tout à l'heure finalement il y a des plugins WordPress
qui sont encore vulnérables aux XSS.
Il y a un MCE qui a été encore vulnérables aux XSS.
Ce n'est pas l'abri que dans deux semaines
il y a quelqu'un qui trouve finalement une XSS sur le stream élément.
Et ou sur Streamlabs.
Et si tu trouves une XSS sur Streamlabs,
la quantité de streams qui utilise Streamlabs
elle est absolument astronomique sur Twitch.
Tu es le king de Twitch.
C'est une vulnérabilité mais tellement terrible.
Ce serait terrible.
Quand on sait les moyens qui sont mis pour pirater des channels YouTube
et faire des faux live à la base.
Exactement.
Et bien il y a un gros enjeu pour trouver ce genre de faillants.
Exactement.
Et quand même pour pas trop non plus faire peur
trop non plus à cette belle communauté de développeurs sur Twitch
et compagnie qui se font des overlays et tout.
Il y a quand même un paquet de conditions à rassembler
pour que ça soit faisable.
Mais je pense que tu voulais faire un paquet.
Il faut aligner les planètes.
Oui, il faut aligner les planètes.
Il faut vraiment aligner les planètes.
Là on croit que mon cas a été hyper...
que j'avais ouvert toutes les portes etc.
Mais au final sans dénigrer tout le travail que tu as fait
on est parti du postulat finalement
pour que ton truc soit OK.
Que ça serait dans une de mes potentielles mises à jour futures
que ton truc pourrait marcher avec moi.
Parce que là à l'époque actuelle moi
je n'ai pas fiché dans ma barlette derrière moi
que les pseudo des utilisateurs qui s'affichaient.
Donc en l'occurrence je récupérais jamais ce qu'il disait dans le pso.
Exactement.
OK.
Je récupérais donc...
Il y avait tout ça.
Il y avait ce volume le mettre dans le pso.
Qui j'imagine...
Exactement.
J'ai checké.
Même possible.
J'ai checké.
J'ai même checké de voir les caractères qui étaient autorisés
et de voir si on pouvait injecter du JS
avec le peu de caractère qui était autorisé.
Tu as quand même testé putain.
C'est vraiment un brighan.
C'est vraiment un brighan.
Donc du coup voilà.
Donc j'ai testé.
Et oui effectivement ça fait partie de notre échange
qu'on a eu avec Benjamin initialement sur Twitter.
C'était qu'il me disait
ah c'est un des premiers trucs que je lui ai dit.
Je lui dis bah là dans l'état
OK j'ai dit que je pouvais faire tout ça
mais je peux pas parce que
c'est vraiment que les pseudo t'affichent dans ton panneau led.
Mais si demain je m'abonne
et que tu décides de mettre le message d'abonnement
ciao.
C'est fini.
C'est fini toi.
Mais en général c'est pas le genre de trucs que tu fais
quand tu vas faire une mise à jour de ton code.
Tu vas pas rechecker la manière d'afficher le message
dans le panneau led.
Tu vois tu vas juste intégrer une nouvelle fonctionnalité par dessus
sans rechecker ce qu'il y a dedans.
Est-ce que ce que je t'avais dit c'est que moi-même
je t'avais dit si j'avais dû
afficher le message de l'abonné
j'aurais j'aurais aussi
je pense ça aurait fait tilt dans ma tête
j'aurais été plus attentif.
Là j'aurais pas mis un inner HTML
mais j'aurais mis un inner texte
parce que j'avais pas envie qu'on affiche
une image lambda comme ça.
Tu vois ça arrête d'éclencher un truc.
Là ce truc encore une fois de inner HTML
je j'espère que toi tu es un peu acquéris quand même.
Mais c'est peut-être pas le cas tout le monde.
Mais là moi tu sais je l'ai fait
j'étais en live twitch
c'était un peu guide copilote
qui complétaient certains trucs par moment etc.
Donc je l'ai fait quand même avec un coup de pied.
Salut si vous appréciez un orscore
vous pouvez nous aider de ouf
en mettant 5 étoiles sur Apple podcast
en mettant une idée d'invité que vous aimeriez qu'on reçoive
ça permet de faire remonter un orscore.

T'es l'une fusée.
J'ai une petite question
parce que là en fait on est en fin de live
donc je me permets une petite digression.
Est-ce que
Tile à la régie tu peux checker un truc dans OBS ?
C'est de créer une source de navigateur
et de regarder dans les options qu'il y a.
Est-ce que c'est quoi les cases que tu peux cocher ?
Je les connais toutes par coeur.
Ah ouais non vraiment.
Attends excellent on peut même le voir en direct.
Ok trop bien.
Trop trop bien.
J'y croyais pas.
Alors là il y a le niveau de droit tout en bas.
Utilisez un débit d'image personnalité.
En la casque que tu cherches et binges à main.
Non non non tu veux avoir une autre idée.
Tu veux voir.
Contrôler l'audio via OBS ok.
C'est une personne qui a l'idée.
Désactiver la source quand elle n'est pas valide.
Raffraîcher à la navigateur quand la scène est après.
Permission de là et là c'est WebSocket normalement.
Ok.
Ok non ça c'est en fait ce n'est pas WebSocket c'est autre chose.
C'est quoi ?
Mais j'allais en parler je devais.
Parce que...
Non non c'est la WebSocket.
C'est ça par défaut ?
C'est la WebSocket.
Je t'ai surcalant.
C'est un objet JS.
Ah ouais ?
Ouais.
Ok je suis content parce que je vais te montrer un truc.
Ouais je suis presque sûr que c'est la WebSocket.
Tu m'as pas en truc.
Vas-y.
En gros.
Le c'était par défaut on est d'accord en-t-il ?
C'était par défaut.
Oui j'ai rien touché encore.
Ok ok donc.
Par défaut tu accès en lecture aux informations d'état d'OBS.
C'est important.
Puisque.
Est-ce que tu peux aller maintenant sur la documentation de OBS WebSocket ?
Pas OBS mais vraiment le module OBS WebSocket.
Ça te dit un truc ?
Oh bah j'ai eu un nom en l'avant.
Ouais mais je vais...
Et en gros.
Non pardon je me trompe.
OBS browser.
Justement pardon j'ai fourché.
Va pas sur OBS WebSocket va sur OBS browser.
Alors c'est un peu chiant à trouver je te le dis pour la régie.
Ouais sur GitHub.
On va voir sur GitHub OBS browser en même temps tu trouves.
Ok.
Ben fait ça.
Vraiment des craques du OBS game là.
Non mais c'est un peu chiant parce qu'ils l'ont mis dans un GitHub module et tout.
Et du coup c'est linké dans un autre ripot.
Ça fait plaisir mais je crois que normalement il y a référencé assez haut.
Tu vois là on va voir.
Parfait.
Parfait parfait.
Ok trop de trucs.
Ok alors.
Avant on descend pas trop.
Si j'ai pas de tendris mais tu m'arrêtes un moment si ça se trouve on confond par la
même chose de ce pas.

Très bien.
Tu as en fait deux manières de contrôler OBS.
La première c'est en utilisant leur API en WebSocket qui permet depuis n'importe quel
service en local de la contrôler avec ou sans mode passe.
C'est là où un streamer peut mettre un mode passe pour se protéger etc.
Ouais.
Tu as une deuxième manière de contrôler OBS qui est via un truc pas très connu du tout.
Des fonctions directement.
Qui est un objet JavaScript qui est injecté dans chaque page que tu charges que tu charges
dans le CEP donc qui est le premier embedded framework qui en fait donc le navigateur
dans OBS ils injectent dedans un objet dans le dans window.obs qui te donne plein de fonctions.
Et là si tu descends tu peux register des évents des callback donc par exemple tu peux savoir
dans ta page web si jamais.
Ok oui.
En live tu pars par en live tu peux faire des actions aussi si tu descends encore.
Ok.
Tu as tous les évents c'est pas strictement équivalent au B.S.
WebSocket.
C'est un peu moins.
Mais c'est pareil.
Tu peux contrôler aussi à peu près tout le reste.
Tu te serais 10 fois moins emmerdé non ?
Pour parler avec.
C'est un peu pareil.
Mais il y aurait plus.
Non parce que par défaut il n'y a pas les droits.
Exactement.
Par défaut c'est en lecture uniquement.
Donc tu peux pas contrôler la page web.
Oui.
Mais par contre là où ça aurait été intéressant ça aurait été d'attacher des événements
dans ton overlaid stream pour moi être prévenu.
Bon bah jamais changer sa scène là.
Bah jamais interverter l'OBS.
Bah jamais supprimer un truc dans sa scène.
Tu les as eu un jour.
Je me fais des appels sur mon serveur je récupère tout ce que tu fais.
Du coup ce que ça veut dire c'est que même si ta connexion web socket a un mot de passe
sur B.S.
Tu as quand même accès en lecture par défaut.
Oui.
À tous les événements qui se passent je pense à la liste des scènes, la liste des sources.
Exactement.
Et je pense que si les sources, par exemple si tu as une image dans ton overlaid OBS qui
s'affiche je pense que je peux la télécharger carrément puisque je la convertis en basse
64 je me l'envoie, je la démachin.
Oui je pense.
Je peux vraiment grappiller des petits trucs comme ça.
Donc on peut voler de l'information même si c'est un peu plus protégé.
C'est cool.
Je suis content parce que j'ai découvert ce truc vraiment il y a une semaine il y a vraiment
pas longtemps.
Bah trop bien moi je ne connaissais pas du tout.
Et c'est vraiment ta connu c'est dans le module browser qui lui-même en fait est un plugin
qui est dans B.S.S.
Ce soir il va rentrer chez lui et faire la V2 de son hack.
Et vraiment on proche un stream.
Mon prochain stream il va vraiment partir en couille.
Alors la conclusion du chat ce sera la grosse discussion de nerd par contre.
Ouais bah on est désolé un mec d'un côté ils sont là pour ça.
C'est ça.
Il s'est un peu là pour ça surtout c'est la fin de live.
Voilà on s'autorise.
Moi j'ai un petit truc que j'aimerais rajouter qui me tient à coeur c'est que au moment
où on a fait ce projet avec Benjamin.
Alors déjà moi j'ai vraiment apprécié énormément la manière dont Benjamin tu as
pris le truc en compte parce que je vous assure qu'il y a vraiment énormément de
gens qui n'auraient pas du tout pris de cette manière là et qui auraient essayé de se
cacher de ça qui aurait supprimé la vidéo remachin truc alors que Benjamin dans sa
grande humilité s'est dit ok j'ai peut-être fait un truc où je m'en fichais un peu donc
en fait je m'en foutais et j'ai fait une connerie mais trop bien parce que c'est
l'opportunité pour montrer de montrer aux gens quelles sont les impacts les implications
de sa machin et ça vraiment je le souligne c'est vraiment excellent parce que j'ai vu
beaucoup de commentaires de gens qui étaient en mode ben t'es vraiment bête il fallait
sanitiser le truc faire toujours attention aux input de machin bon on fait tout ça ça
marche pas alors que faire ce que tu avais ça marche vraiment exactement au premier
degré très curieux du coup voilà donc ça c'était excellent déjà et ensuite pour
remontir sur le tout vraiment on a une grosse masse de commentaire de commentaire
tu sais il faut sanitiser les inputs moi je suis vraiment pas d'accord avec ça il faut
juste pas avoir d'input à sanitiser il faut que ce soit juste pas injecter par défaut la
sanitisation c'est vraiment le pour moi la dernière barrière possible et la sanitisation
bah ça se contoure en fait en la sanitisation pour ceux qui ne savent pas trop j'explique
vite fait ce que c'est ça consiste à dire ok j'interdis ce caractère et ce caractère
parce que vraiment si tu l'étapes tu vas arriver à injecter typiquement dans si je voudrais
sanitiser une input pour être sûr qu'on puisse pas l'injecter voilà je dirais je
j'interdis le chauvre on je ne peux pas mettre de html dans mon site parce que tu peux pas de
chauvre on tu peux pas mettre de chauvre on donc c'est fini pareil je pourrais dire les
parenthèses sont interdits donc tu peux pas appeler de fonction en j'ai re-script si tu n'as pas les
parenthèses donc ben c'est mort et en fait ça c'est de la sanitisation sauf que ça se
contourne et pour ça j'ai un truc aussi que j'ai amené à la régie alors la régie c'est dans le
notion c'est le tout dernier le tout dernier un bed tout en bas et du coup c'est des techniques
de sanitisation qui encore y a pas c'est vraiment c'est le jeu du chat la souris la
sanitisation c'est ah ils nous ont interdit de mettre des parenthèses ben on va faire comme ça
ah ils ont fait comme ça ben on va interdire ça maintenant et c'est vraiment le jeu du chat
la souris et aujourd'hui on arrive à des techniques de sanitisation qui sont plutôt
modernes et on arrive à faire des trucs avec très très peu de caractère donc là on a ce tweet
d'une personne qui s'appelle matias carlson alors matias carlson le boss le big boss je suis
désolé et il est passé récemment dans une vidéo de live offer flow donc sur un truc hyper
cq machin et donc lui finalement il arrive à faire de l'injection de l'injection avec très peu
de caractère alors là sa technique elle consiste à elle consiste à abuser d'une variable par
défaut qui s'appelle name et cette variable par défaut qui s'appelle name tu peux mettre ce que tu
veux dedans même si ce n'est pas ton site et ça c'est un truc de fou en java script en gros je
t'explique ça ça c'est incroyable c'est un truc incroyable en gros si j'ouvre youtube en faisant
dans mon java script window point open youtube le deuxième argument de cette de cette fonction
window point open c'est la variable name et du coup je peux donner à cette fenêtre le nom que
je veux et je goutte dans cette fenêtre la variable name existe et dedans il y a le truc que moi j'ai
mis donc en fait ce qui est hyper malin donc les gens qui parlent de sanitisation et tout ok je
joue ta fenêtre avec window point name de window point open dans name je mets mon code java script
lui il est pas sanitisé je mets tout mon java script dedans et là j'arrive sur ton site et j'exécute
tout ce qu'à dans le name en fait et donc là c'est ce que c'est ce que nous démontre ici
matias c'est un client exécute la window exactement mais c'est pas si improbable en vrai
c'est pas si un problème et puis même là dans le cadre de la main si on voudrait l'appliquer
je pourrais window point open moi même donc en fait c'est réglé je window point open
self et voilà enfin je vois des ho mais je pense que ça concerne les 10 personnes qui
sont encore avec nous et qui ont réussi à suivre ce cher aviat les oles si c'est fait pour honnêtement
c'est la fin du live c'est pour le cas de ton ronnie qui n'a pas manqué l'info oui ronnie qui
notre expert sécurité qu'on a des espères recevoir bientôt à nouveau sur nascore et à qui on
passe sur beau jour évidemment merci c'est hyper intéressant franchement c'est chronique merci à
toi de t'être prêté de t'être prêté au jeu et franchement je maintiens le gg parce que c'est pas
forcément c'est pas forcément aussi évident de faire du contenu sur ses propres vues et alors
que faudrait qu'on s'advienne normal en fait c'est pas un problème bon franchement balèque fin
genre et en tout ce qui peut nous c'était une une heure un peu potage il n'y avait rien de vraiment
finalement très risqué encore une fois il fallait un contexte de fou pour reproduire ce truc là donc
en soi c'est pas c'était c'était pas très grave et c'est pas un truc dans le contexte professionnel
c'est moi pendant mon live faire un truc avec les abonnés donc donc après c'est trop cool si ça
sert la communauté moi je suis trop content en fait tu sais quoi ce qui serait bien c'est que j'ai
que d'autres gens qui est ton net à l'esprit ce soit des entreprises parce que je vais vous raconter
un truc c'est que nous depuis très longtemps on a des idées de une idée de concept à faire sur
nos chaînes ce serait de prendre une boîte qui s'est fait récemment pirater ok qui a été
victime d'un ransomware un truc si possible un peu complexe intéressant sur la manière dont
ils se sont fait pirater et de les recevoir et de discuter avec eux et qui nous explique comment
ça se passe de se faire pirater en fait c'est quoi comment on vit de l'intérieur un scénario
d'attaque dans la vraie vie comment on applique des contre mesures comment on répare l'époque
cassée ce serait passionnant comme contenu ce serait ultra utile comme tu l'as dit parce que
tout le monde pourrait bénéficier de l'expérience on a un problème c'est que personne veut faire
ça personne veut faire ça alors on s'est arrivé ça m'est arrivé mais pas dans l'entreprise
maintenant mais du coup j'ai enfin je pense pas que j'ai l'autorisation de toi donc il faudrait
que je contacte mon ancien entreprise machin il n'en a mais ouais j'ai vécu un acte de l'intérieur
il se passe des trucs de fou c'est très pro style et bien on est méga chaud d'avoir la sure dans le
bas du dos là ouais ouais ouais tout ça on est méga chaud d'avoir cette histoire et je suis
très optimiste je suis trop chaud pour d'en discuter avec l'employé à tout mais nous ce qui s'est
passé quasiment à chaque fois c'est que les gens ont les flippettes en fait ils ont peur parce
que afficher quelque chose de négatif comme se faire péter à côté du nom de ta marque et bien
ça fait un peu peur ce qui voit pas en fait c'est le potentiel bénéfique qui est derrière est-ce
que là ben jamais toi t'as l'air t'as l'air bête à nous qu'on parle de ta vulnérabité bon c'est un
peu plus simple parce que c'est ça c'est pas sur ton produit sur ton service je suis d'accord mais
quand même je suis persuadé qu'en réalité derrière ce genre d'histoire le fait de voilà d'avoir un
peu d'humilité de raconter bah ouais on fait pas tout parfait parce qu'en fait personne ne fait
tout parfait ça arrive à tout le monde des piratages au-delà de l'humilité il y a peut-être le côté
il se flippe de tu sais en il tende le bâton pour se refaire battre tu vois en mode on s'est fait
pirater c'était une histoire ancienne et du coup ça ça ramène des des acceurs tu sais qui font
bien ce qui ramène des hackers c'est le fait je sais justement le manque d'humilité en fait le fait
de dire nous on est un piratable on est parfait ou alors que là c'est un démarche juste tu assumes le
fait que oui ça arrive à tout le monde de se faire pirater tu vas faire tu vas partager ton
expérience qui va être utile à plein de gens je pense que au contraire en fait d'un point de
jeu d'une marque ça peut être vraiment intéressant de le faire et au contraire être bénéfique pour
son image c'est ce qu'on essaie de c'est ce qu'on essaie de pitié c'est on y croit vraiment mais
pour l'instant on a très très peu de succès je te souhaite que ça marche moi aussi le concept
est trop cool négocier avec ta boîte quand tu as l'air de reconnaître et vous vous souvenez de moi
et évidemment le but c'est que ce soit quelque chose qui est un peu d'ampleur de déchel donc je
vous remercie si vous nous envoyez des mails etc mais si c'est une petite boîte ou une toute
petite structure c'est moins intéressant le but c'est aussi d'avoir des enjeux un peu critique et
voir ce qui se passe sur une structure un peu importante

Les infos glanées

Je suis une fonctionnalité encore en dévelopement

Signaler une erreur

Underscore_

IA, Hacking, Robotique — Des conversations de terrain avec ceux qui construisent. 🥨


Partenariats: underscore@micorp.fr


---


Hébergé par Acast. Visitez acast.com/privacy pour plus d'informations.

Tags
Card title

Lien du podcast

[{'term': 'IA', 'label': None, 'scheme': 'http://www.itunes.com/'}, {'term': 'Investissement', 'label': None, 'scheme': 'http://www.itunes.com/'}, {'term': 'Nouvelles Technologies', 'label': None, 'scheme': 'http://www.itunes.com/'}, {'term': 'Tech', 'label': None, 'scheme': 'http://www.itunes.com/'}, {'term': 'Actu tech', 'label': None, 'scheme': 'http://www.itunes.com/'}, {'term': 'Cybersécurité', 'label': None, 'scheme': 'http://www.itunes.com/'}, {'term': 'Développement', 'label': None, 'scheme': 'http://www.itunes.com/'}, {'term': 'Dev', 'label': None, 'scheme': 'http://www.itunes.com/'}, {'term': 'Entreprenariat tech', 'label': None, 'scheme': 'http://www.itunes.com/'}, {'term': 'IT', 'label': None, 'scheme': 'http://www.itunes.com/'}, {'term': 'Robotique', 'label': None, 'scheme': 'http://www.itunes.com/'}, {'term': 'Technology', 'label': None, 'scheme': 'http://www.itunes.com/'}]

Go somewhere