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
CVE-2021-47881 — PoC e analisi di uno stack-buffer-overflow locale in dataSIMS Avionics ARINC 664-1 v4.5.3, con dettaglio del payload, script di riproduzione e correzioni al record CVE. | Kitploit
Strumenti/GitHubGitHub/kagancapar/cve-2021-47881
Analisi delle VulnerabilitàExploitAnalisi di BinariApprendimento e FormazioneBinary Exploitation
GitHubkagancapar/cve-2021-47881

CVE-2021-47881

PoC e analisi di uno stack-buffer-overflow locale in dataSIMS Avionics ARINC 664-1 v4.5.3, con dettaglio del payload, script di riproduzione e correzioni al record CVE.

Vedi Repository
41 mese faNon ancora revisionato

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

CVE-2021-47881

Overflow del buffer locale basato sullo stack in dataSIMS Avionics ARINC 4.5.3 (Data Device Corporation)

Ciao, sono Kağan Çapar. Nel febbraio 2020 ho trovato un overflow del buffer locale basato sullo stack nel software databus avionico dataSIMS di DDC e ho pubblicato una proof of concept su Exploit-DB nel febbraio 2021. Quasi cinque anni dopo, nel gennaio 2026, VulnCheck ha assegnato la CVE-2021-47881 come CVE retroattiva — sono venuto a conoscenza dell'assegnazione solo a posteriori, non da essa.

Questo repository è il record archivistico di quel ritrovamento: la PoC originale conservata così come pubblicata, un porting Python 3 byte-identico, una scomposizione annotata del payload e le correzioni per due problemi nel record CVE pubblicato.

Ambito, fin da subito. Questo è un record, non un'analisi delle cause profonde. dataSIMS è un software commerciale closed-source, non esiste una patch del vendor e non ho ritestato questo exploit contro una release attuale. Ciò che è verificabile qui è verificato e mostrato; tutto il resto è segnalato in Limitazioni. Se sei arrivato qui aspettandoti la profondità di CVE-2026-5201, leggi prima quella nota.

CVECVE-2021-47881
CWECWE-121 — Stack-based Buffer Overflow
CVSS v4.06.7 MEDIUM — AV:L/AC:L/AT:N/PR:N/UI:A/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N (VulnCheck)
CVSS v3.18.4 HIGH — AV:L/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H (VulnCheck)
Componente interessatodataSIMS Avionics ARINC 664-1, versione 4.5.3
VendorData Device Corporation
CNAVulnCheck
Scoperta2020-02-17
PoC pubblicata2021-02-19 — EDB-49577
CVE pubblicata2026-01-23 (NVD)
Patch del vendornessuna pubblicata
Testato suWindows 10 Enterprise x64

Riepilogo

Il componente interessato è il modulo ARINC 664-1 di dataSIMS 4.5.3. Rilegge un file di risultati che — nonostante il modulo a cui appartiene — si chiama milstd1553result.txt; il nome è un artefatto del vendor ereditato dalla discendenza MIL-STD-1553 della suite, non un'indicazione di quale modulo sia interessato. Fornire una versione sovradimensionata e modellata dall'attaccante di quel file fa traboccare un buffer stack a dimensione fissa durante il percorso di rilettura e sovrascrive l'indirizzo di ritorno salvato. Il crash termina con il controllo completo di EIP:

root@kitploit:~
EIP  42424242        <- 'BBBB' from the payload
ECX  42424242
     C0000005        <- STATUS_ACCESS_VIOLATION

La PoC pubblicata è di 1040 byte e si ferma alla sovrascrittura di EIP. Non ottiene l'esecuzione di codice, e non è mai stata pensata per questo — vedi Sfruttabilità.

Anatomia del payload

La disposizione dei campi della PoC, verificata eseguendo il porting (py poc/poc_py3.py --layout):

CampoOffsetLunghezzaContenuto
junk0 / 0x000600riempimento 0x41
align600 / 0x2588"22221111"
prop608 / 0x260380riempimento 0x43
imp988 / 0x3dc10"bzhrturlu2"
imp2998 / 0x3e69"aracag" 0x13 "1z"
overwrite1007 / 0x3ef40x42 × 4 → indirizzo di ritorno salvato
buf1011 / 0x3f329stub del decoder shikata_ga_nai
totale1040sha256 530efb5efef917082e40dcf379f5e0a526375724af18aba6f0270f794f96d066

L'offset di EIP è 1007. Non è un numero che ottieni da !mona findmsp o pattern_offset.rb — è la somma di cinque campi regolati a mano. La PoC originale è stata costruita allargando un crash finché l'indirizzo di ritorno si spostava, non localizzando l'offset analiticamente. Lo segnalo apertamente, invece di abbellirlo: una riscrittura pulita troverebbe la distanza reale fino all'indirizzo di ritorno salvato ed eliminerebbe del tutto align, imp e imp2, dato che nessuno di essi ha un significato. imp/imp2 sono stringhe filler, non import.

Lo stub del decoder è inerte

buf è uno stub shikata_ga_nai di 29 byte generato da msfvenom. Disassemblato con ndisasm -b32:

root@kitploit:~
00000000  DAC1              fcmovb st1              ; junk FPU op (sgn signature)
00000002  D97424F4          fnstenv [esp-0xc]       ; GetPC
00000006  58                pop eax                 ; eax = &stub
00000007  BB0B7E9762        mov ebx,0x62977e0b      ; XOR key
0000000C  33C9              xor ecx,ecx
0000000E  B101              mov cl,0x1              ; <-- ONE 4-byte block
00000010  315819            xor [eax+0x19],ebx      ; decode block at +0x19
00000013  83E8FC            sub eax,-4              ; eax += 4
00000016  035815            add ebx,[eax+0x15]      ; key schedule
00000019  E9                db 0xe9                 ; <-- encoded block, not code
0000001A  8B                db 0x8b
0000001B  7C9C              jl 0xffffffb9

Da questo emergono due cose, ed entrambe significano che il payload non potrà mai essere eseguito:

  1. mov cl,0x1 — il ciclo di decodifica è configurato per un singolo blocco di 4 byte. Dietro non c'è un payload reale, solo quei 4 byte.
  2. Il terminatore \xe2\xf4 (loop) è assente. Uno stub sgn completo termina il ciclo di decodifica con loop prima del corpo codificato. Qui l'esecuzione cade direttamente da add ebx,[eax+0x15] in E9 8B 7C 9C — che in quel momento è ancora codificato e comunque non è una sequenza di istruzioni valida.

Quindi lo stub è un segnaposto che occupa la coda del payload. Questo corrisponde al modo in cui la PoC è stata descritta su Exploit-DB, ed è la lettura onesta: questa è una dimostrazione di controllo di EIP, non un exploit funzionante.

Sfruttabilità (valutazione onesta)

Valutando questo come farebbe un broker o un vendor, anziché come fa il vettore CVSS v3.1:

  • Nessun confine di privilegio viene superato. milstd1553result.txt è un file che l'applicazione stessa produce, in una posizione che lo stesso utente controlla già. Un attaccante che può riscriverlo può in generale già eseguire codice come quell'utente. Questo lo rende un bug di robustezza molto più che un bug di sicurezza.
  • La PoC non precede nulla. Il controllo di EIP su una build x86 del 2020 dice poco di per sé. Per trasformarlo in esecuzione serve una strategia DEP/ASLR — un modulo senza /DYNAMICBASE, una catena ROP o una sovrascrittura parziale. Niente di tutto questo è stato fatto, e non ho verificato quali mitigazioni includa la build attuale.
  • È locale e richiede che l'operatore carichi il file. Il UI:A di CVSS v4.0 riflette la realtà; il UI:N della v3.1 no.

Se qualcuno vuole rendere questo davvero interessante, le superfici produttive non sono affatto questo file: il driver kernel che DDC distribuisce per le sue schede PCIe 1553/664 (gestione degli IOCTL → LPE), qualsiasi parsing di frame ARINC 664/AFDX esposto alla rete e i formati di file di input che la suite consuma da fonti non attendibili. Questi attraversano confini reali. Questo no.

Correzioni al record pubblicato

Il record CVE presenta due difetti che vale la pena dichiarare chiaramente, dato che è pubblicato a mio nome.

1. Il prodotto del vendor citato è quello sbagliato

La designazione del prodotto nel record — "dataSIMS Avionics ARINC 664-1 version 4.5.3" — è corretta. Il componente interessato è il modulo ARINC 664, come indicato nel titolo originale di Exploit-DB.

Il difetto è il riferimento al vendor che il CNA ha allegato. NVD cita BU-69414, che è la pagina del prodotto software MIL-STD-1553 di DDC — uno stack databus diverso da quello interessato da questo ritrovamento. ARINC 664 è AFDX (Ethernet commutata profilata, ARINC 664 Part 7); MIL-STD-1553 è un bus command/response a doppia ridondanza da 1 Mbps. Sono standard non correlati.

La causa probabile della citazione errata è il nome del file di risultati. dataSIMS chiama il file di risultati del modulo ARINC 664 milstd1553result.txt — un residuo della discendenza MIL-STD-1553 della suite. Chiunque legga la descrizione della CVE e cerchi una pagina prodotto corrispondente seguirà quella stringa fino alla linea 1553, che è ciò che sembra essere accaduto. Il nome del file non è una prova del modulo interessato, e un record che punta alla pagina del prodotto 1553 manda i difensori ad auditare il componente sbagliato.

2. I due vettori CVSS si escludono a vicenda

Entrambi i vettori provengono da VulnCheck e si contraddicono a vicenda sui due aspetti che contano:

v3.1 (8.4 HIGH)v4.0 (6.7 MEDIUM)
Interazione utenteUI:N — nessunaUI:A — richiesta
ImpattoC:H/I:H/A:H — CIA completaVC:N/VI:N/VA:H — solo disponibilità

Non possono essere entrambi giusti. Il vettore v4.0 è quello difendibile: la PoC dimostra un crash, non una divulgazione o una perdita di integrità. Il punteggio v3.1 di 8.4 sopravvaluta il ritrovamento, e preferisco dirlo qui piuttosto che trarne beneficio.

Riproduzione

Qui non serve il software target — la PoC scrive solo il file malformato. Per innescare l'overflow serve dataSIMS 4.5.3, un software commerciale con licenza che questo repository non distribuisce.

root@kitploit:~
# print the field map, write nothing
py poc/poc_py3.py --layout

# write the 1040-byte payload
py poc/poc_py3.py -o milstd1553result.txt

Quindi carica il file con la build interessata sotto un debugger e osserva la sovrascrittura di EIP. poc/49577.py è il sorgente Python 2 originale, archiviato alla lettera; non verrà eseguito su Python 3.

Note sulla conversione Python 2 → 3

Il porting produce un file byte-identico di 1040 byte (sha256 530efb5e…). Tre cose hanno dovuto cambiare, e una cosa che sembra un bug non lo è:

  • print len(win32) è un'istruzione in Python 2, un SyntaxError in Python 3.
  • L'originale concatena campi str con uno shellcode bytes. Python 2 lo permetteva perché str era bytes; Python 3 solleva TypeError.
  • open(..., "w") deve diventare "wb". In modalità testo Python 3 codificherebbe in UTF-8 ogni byte ≥ 0x80 nello stub — 0xda → 0xc3 0x9a — corrompendo silenziosamente il payload e cambiandone la lunghezza.
  • imp2 = "\x61\x72\x61\x63\x61\x67\x131\x7a" non è una stranezza legata alla versione. \x accetta esattamente due cifre esadecimali sia in Python 2 che in Python 3, quindi \x131 è 0x13 seguito dal carattere 1. Il campo è di 9 byte in entrambi. Sembra solo scritto male.

Limitazioni

Dichiarate esplicitamente così nessuno deve indovinare cosa è stato fatto e cosa no:

  • Nessuna analisi delle cause profonde. Binario closed-source; la funzione che trabocca non è stata identificata.
  • Nessuna patch, nessun advisory del vendor e nessuna registrazione di divulgazione coordinata — il ritrovamento del 2020 è andato direttamente su Exploit-DB.
  • Non ritestato su alcuna release successiva alla 4.5.3 e non testato contro le mitigazioni Windows attuali.
  • Nessuna esecuzione di codice funzionante. La sovrascrittura di EIP è l'intero risultato.
  • La CVE è stata assegnata retroattivamente nel 2026 da un CNA di terze parti, cinque anni dopo la pubblicazione, senza contattarmi.

Cronologia

DataEvento
2020-02-17Vulnerabilità trovata
2021-02-19PoC pubblicata — EDB-49577
2026-01-22Advisory di VulnCheck pubblicato
2026-01-23CVE-2021-47881 pubblicata su NVD
2026-06-17Record NVD modificato l'ultima volta

Riferimenti

  • https://nvd.nist.gov/vuln/detail/CVE-2021-47881
  • https://www.cve.org/CVERecord?id=CVE-2021-47881
  • https://www.vulncheck.com/advisories/datasims-avionics-arinc-local-buffer-overflow
  • https://www.exploit-db.com/exploits/49577
  • https://www.ddc-web.com/

Crediti

Kağan Çapar — GitHub · Exploit-DB · LinkedIn · X

Approfondimenti: English · Türkçe

Scarica lo strumento