Recherche de 34zY / Hamza Terir sur Dorksearch (service public de recherche de Google Dorks). Divulgation complète après contact resté sans réponse.
Contexte
Dorksearch est un outil OSINT public utilisé par des chercheurs en sécurité et bug bounty hunters pour construire des Google Dorks. Cible à forte valeur : ses utilisateurs sont des professionnels de la sécurité.
Comment je l’ai trouvée
La page de résultats réfléchit l’entrée utilisateur sans encodage HTML et sans CSP. Un paramètre de recherche/rendu permet d’injecter du HTML/JS arbitraire :
</div><script>/* PoC : preuve d'exécution */</script><img src=x onerror="/* open redirect */"><!--
Le onerror d’une image invalide déclenche l’ouverture d’une fenêtre vers une page contrôlée par l’attaquant (open redirect), la page paraissant légitime.
PoC : injection réfléchie exécutée sur Dorksearch, defacement rendu + fenêtre externe ouverte via onerror.
Validation technique sécurisée
Le contrôle peut être rejoué avec un marqueur inerte, sans script ni redirection :
curl --fail-with-body --max-time 5 \
--get --data-urlencode 'q=PORTFOLIO_TEST_MARKER' \
'https://AUTHORIZED_HOST/search'
La correction se vérifie en observant que le marqueur est encodé dans le HTML, pas interprété. Côté serveur, le principe minimal est l’encodage par contexte :
import html
def render_search_term(value: str) -> str:
return html.escape(value, quote=True)
La CSP, HttpOnly/SameSite et la suppression de l’open redirect réduisent l’impact, mais ne remplacent pas l’encodage de sortie à chaque sink.
La faille
XSS reflété (CWE-79) : entrée non neutralisée injectée dans le HTML de sortie, aggravée par l’absence de Content-Security-Policy. Chaînée à un open redirect (CWE-601), elle permet vol de session puis phishing.
Impact
- Vol du cookie de session d’un utilisateur (chercheur / pentester).
- Accès à son historique de dorks, ses cibles de reconnaissance en cours.
- Risque de compromission de chaîne : intelligence sur des tests d’intrusion actifs.
CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:H/I:H/A:N = 8.7 (High).
Remédiation
- Encodage en sortie de toute entrée réfléchie (
escape/templating auto-échappé). - Content-Security-Policy stricte (
script-src 'self'). - Validation d’entrée (liste blanche de caractères) et en-têtes de sécurité (
X-Frame-Options,X-Content-Type-Options).
CWE-79 · CWE-601.