Podmíněné arbitrary file read v DIR-825ACG1
CVE: Pending (z důvodu ignorování od vendora musím řešit s MITRE)
Vendor: D-Link
Model: DIR-825ACG1
Hardware revize: R2
Verze firmwaru: 1.12.0.08b1673-embedded
Build date firmwaru: Mon Mar 30 2020 3:33:00 PM MSK
Status: EOL zařízení, report bez vendor odpovědi
Úvod
Tuhle zranitelnost jsem objevil při běžném používání mého routeru. Endpoint webového rozhraní přijímá cestu k souboru jako parametr a načítá ho bez dostatečné validace vstupních dat. Kombinací dvojtého path traversal a přístupu k filesystemu jde číst libovolné soubory bez autentizace.
Objev
Při běžném přihlašování do administračního rozhraní routeru jsem ze zvědavosti otevřel developer tools (F12) a sledoval requesty. Concat endpointy obsahující cestu k souboru mi přišli jako zajímavý cíl pro Path Traversal:
První pokus, kde jsem zkoušel načíst systémový soubor mi vrátil prázdnou odpověď bez chybového hlášení. Přišlo mi podezřelé že request prošel. Ale při zadání cesty k neexistujícímu souboru server vrátil 404. To potvrdilo moji hypotézu - server soubor načítá ale nedokáže ho zpracovat.
Existující soubor:
Neexistující soubor:
Analýza mechanismu
Zajímala mě struktura souboru, který server načítá. Tak jsem se přihlásil přes telnet a začal ho hledat. Kvůli omezenému prostředí jsem musel vytvořit vlastní příkaz, který omezený shell může spustit:
ls -R / 2>/dev/null | grep -C 5 "lib_js_list"
Výstup byl následující:
[...]
/srv/anweb/apps/admin:
templates
pages
modules
lib_js_list
js_list
index.html
img
global_js_list
general_css_list
Zaujal mě konkrétně soubor lib_js_list protože jsem ho viděl už v requestu, ukázalo se že obsahuje cesty k souborům:
apps/admin/app.js
apps/admin/modules/history.js
apps/admin/modules/root_scope_interface.js
apps/admin/modules/snapper.js
apps/admin/modules/auth_interface.js
[...]
Cesty v souboru jsou relativní k working directory (zřejmě webové aplikace), nikoliv systémové. Pomocí Path Traversal je možné tuto hranici překročit.
Proof of Concept
Vytvoření vlastního listu s Path Traversal sekvencí v /tmp složce pomocí telnet (v shellu routeru):
echo ../../etc/passwd > /tmp/POC
Posílání requestu na zranitelný endpoint (v shellu útočníka):
curl "http://192.168.0.1/concat?type=js&path=../../tmp/POC"
Výsledek requestu:
admin:[...]:0:0:root:/:/bin/sh
nobody:x:99:99:nobody:/:/bin/false
ftp:x:500:500:ftp:/mnt:/bin/false
Root Cause Analysis
Chyba vzniká v důsledku nedostatečné sanitizace uživatelského vstupu. Abych identifikoval přesné místo, kde dochází k problému, provedl jsem reverse engineering binárky anweb (webového serveru routeru) v Ghidra.
Architektura MIPS pro mě byla nová a vyžadovala dodatečný research, nicméně díky dekompilaci kódu se podařilo identifikovat funkci concat_end_point, která zpracovává HTTP requesty pro daný endpoint.
Tato funkce následně volá get_full_path, která konstruuje cestu k souboru na základě uživatelského vstupu. Výsledná cesta vzniká spojením pevného prefixu /srv/anweb/ a nevalidovaného vstupu od uživatele, bez jakékoliv sanitizace nebo canonicalizace.
Relevantní část funkce get_full_path:
Relevantní část dunkce concat_end_point:
Omezení exploitace
Z důvodu toho, že binárka anweb načítá list z filesystemu, musí mít útočník buď fyzický přístup k zařízení (vysvětleno dole), nebo znát jinou chybu nebo funkci, pomocí které dokáže zapsat list na filesystem. Bohužel se mi nepovedlo najít chybu nebo funkci která by na filesystem zapislovala, tak aby to úspěšně zpracoval concat endpoint
Attack Vectors
Zranitelnost vyžaduje aby byl soubor s vlastním listem dostupný na filesystému routeru. Identifikoval jsem několik způsobů jak toho dosáhnout:
1. Samba (NAS funkce)
Router podporuje sdílení souborů přes Samba. Útočník s přístupem k Samba serveru může nahrát vlastní list. Výchozí konfigurace tohle nepovoluje a útočník musí znát systémový path k sdílené složce.
2. Anonymous FTP
Router povoluje anonymní FTP přihlášení, ale výchozí konfigurace to nastavené nemá.
3. USB Flash Disk (nejvýznamnější vektor)
Router pojmenovává USB zařízení deterministicky (/mnt/usb1_0) kvůli jedinému USB portu. Útočník s fyzickým přístupem může toho zneužít, a číst tak libovolné soubory bez jakékoliv autentizace.
Dopad
Úspěšné zneužití umožňuje čtení libovolných souborů ze systému bez autentizace, včetně:
- /etc/passwd
- Konfiguračních souborů routeru
Timeline
-
února 2026 - Objevena chyba zabezpečení
-
února 2026 - Nahlášeno výrobci (D-Link)
-
dubna 2026 - Uplynula lhůta bez odezvy
-
května 2026 - Zveřejnění (zařízení s ukončenou podporou)
Doporučení
Uživatelé kteří aktivně používají toto zařízení by měli zvážit výměnu za podporovaný model výrobcem. Pokud výměna není možná, tak izolovat administrační rozhraní aby nebylo dostupné z internetu a nedůvěryhodných sítí (protože i když chyba kterou jsem našel vyžaduje Write Access, může se stát že ho útočník získá pomocí jiné chyby) a zakázat Samba, FTP a fyzický přístup k USB portu.




