
CVE-2024-51442 Write-up und Beispielkonfigurationsdatei
CVE-2024-51442 ist eine Command-Injection-Sicherheitslücke in minidlna/Readyshare Version <= 1.3.3. Diese Sicherheitslücke kann ausgenutzt werden, indem minidlnad mit einem speziell präparierten db_dir-Parameter ausgeführt wird, der in der minidlna.conf verwendet wird.
Die Sicherheitslücke besteht sowohl in der rescan-Funktionalität der check_db-Funktion
minidlna.c
rescan:
CLEARFLAG(RESCAN_MASK);
if (ret < 0)
DPRINTF(E_WARN, L_GENERAL, "Creating new database at %s/files.db\n", db_path);
else if (ret == 1)
DPRINTF(E_WARN, L_GENERAL, "New media_dir detected; rebuilding...\n");
else if (ret == 2)
DPRINTF(E_WARN, L_GENERAL, "Removed media_dir detected; rebuilding...\n");
else
DPRINTF(E_WARN, L_GENERAL, "Database version mismatch (%d => %d); need to recreate...\n",
ret, DB_VERSION);
sqlite3_close(db);
snprintf(cmd, sizeof(cmd), "rm -rf %s/files.db %s/art_cache", db_path, db_path);
if (system(cmd) != 0)
DPRINTF(E_FATAL, L_GENERAL, "Failed to clean old file cache! Exiting...\n");
als auch, wenn -R als optionaler Kommandozeilenparameter übergeben wird:
minidlna.c
case 'R':
snprintf(buf, sizeof(buf), "rm -rf %s/files.db %s/art_cache", db_path, db_path);
if (system(buf) != 0)
DPRINTF(E_FATAL, L_GENERAL, "Failed to clean old file cache %s. EXITING\n", db_path);
break;
Der obige Code führt "rm -rf %s/files.db %s/art_cache" aus, wobei db_path als Parameter für den Formatstring dient. db_path wird aus der Konfigurationsdatei übernommen, wenn es von dem Code in options.c verarbeitet wird.
Diese Sicherheitslücke kann ausgenutzt werden, indem die beispielhafte minidlna.conf aus diesem Repository als Konfigurationsdatei verwendet wird. Dadurch wird als Proof of Concept ein Dateisystemfenster mittels xdg-open geöffnet.
minidlnad -d -f minidlna.conf