
Proof-of-concept e descrizione tecnica per una vulnerabilità di divulgazione di informazioni non autenticata nell'endpoint unfurl di XenForo, inclusi uno script Python per verificare il problema.
XenForo precedente alla 2.3.13 espone anteprime di link in sospeso (rich-link preview) tramite un endpoint non autenticato identificato da ID interi prevedibili.
unfurl.php accetta una POST contenente ID globali di UnfurlResult, carica quelle righe e restituisce l'HTML di anteprima renderizzato. Non verifica una sessione, la visibilità dei contenuti, l'oggetto padre o una capability firmata. Il frammento restituito include l'URL originale, inclusa la sua query string.
Lo sfruttamento è sensibile al fattore tempo. Una vittima deve inviare un URL autonomo mai visto prima in contenuti riservati, la destinazione deve restituire metadati utilizzabili e l'attaccante deve prevedere l'ID appena allocato mentre la riga è in sospeso. Un'anteprima recente di proprietà dell'attaccante può fungere da indicatore di livello massimo (high-water mark). Il problema è un bypass dell'autorizzazione e una divulgazione di informazioni, non SSRF o esecuzione di codice.
Ho riprodotto una divulgazione di ID adiacente con marcatori sintetici su XenForo 2.3.12 (build 2031270). XenForo 2.3.13 contiene la correzione.
python poc.py --base-url https://xenforo.example --result-id 123 --expect-marker SYNTHETIC_TEST_MARKER
Lo script richiede esattamente un ID di test noto senza cookie. Non enumera mai gli ID né stampa l'HTML restituito. Segnala solo se il marcatore sintetico previsto era presente.
Scoperto da Marco Paciaroni (BomboBombone).