Vojtěch Hronn00bDebugger
Domů/Osobní Výzkum/Výzkum Zranitelností/Podmíněné arbitrary file read v DIR-825ACG1
Výzkum Zranitelností

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:

network_tab

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:

burpsuite_200

Neexistující soubor:

burpsuite_404


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:

ghidra_get_full_path.png

Relevantní část dunkce concat_end_point:

ghidra_concat_end_point.png


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

  1. února 2026 - Objevena chyba zabezpečení

  2. února 2026 - Nahlášeno výrobci (D-Link)

  3. dubna 2026 - Uplynula lhůta bez odezvy

  4. 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.