Skip to content
KitploitKITPLOIT
ToolsExploitsBlog
Log in
Submit
ToolsExploitsBlog
Submit

Hacking, PenTest, and Cybersecurity Tools for Your Security Arsenal!

Kitploit is a directory of hacking, cybersecurity, and pentesting tools. Discover the latest project updates to find vulnerabilities, analyze systems, automate testing, and strengthen your security.

··Feeds·Contact·Privacy·© 2026 Kitploit

Tool Directory

Categories

View all categories
Loading categories
CVE-2021-47881 — PoC and analysis of a local stack-buffer-overflow in dataSIMS Avionics ARINC 664-1 v4.5.3, with payload breakdown, reproduction script, and CVE record corrections. | Kitploit
Tools/GitHubGitHub/kagancapar/cve-2021-47881
Vulnerability AnalysisExploitationBinary AnalysisLearning & EducationBinary Exploitation
GitHubkagancapar/cve-2021-47881

CVE-2021-47881

PoC and analysis of a local stack-buffer-overflow in dataSIMS Avionics ARINC 664-1 v4.5.3, with payload breakdown, reproduction script, and CVE record corrections.

View Repository
71 month agoNot yet reviewed

Most Popular

View all →

Discover the most used tools by our community.

Explore all tools

Browse our collection of tools

View all tools →
Share

CVE-2021-47881

Local stack-based buffer overflow in dataSIMS Avionics ARINC 4.5.3 (Data Device Corporation)

Hi, I'm Kağan Çapar. In February 2020 I found a local stack-based buffer overflow in DDC's dataSIMS avionics databus software and published a proof of concept on Exploit-DB in February 2021. Nearly five years later, in January 2026, VulnCheck assigned it CVE-2021-47881 as a retroactive CVE — I learned about the assignment after the fact, not from it.

This repository is the archival record for that finding: the original PoC preserved as-published, a byte-identical Python 3 port, an annotated breakdown of the payload, and corrections for two problems in the published CVE record.

Scope, up front. This is a record, not a root-cause analysis. dataSIMS is closed-source commercial software, there is no vendor patch, and I have not re-tested this against a current release. What is verifiable here is verified and shown; everything else is called out in Limitations. If you came here expecting the depth of CVE-2026-5201, read that note first.

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)
AffecteddataSIMS Avionics ARINC 664-1, version 4.5.3
VendorData Device Corporation
CNAVulnCheck
Discovered2020-02-17
PoC published2021-02-19 — EDB-49577
CVE published2026-01-23 (NVD)
Vendor patchnone published
Tested onWindows 10 Enterprise x64

Summary

The affected component is the ARINC 664-1 module of dataSIMS 4.5.3. It reads back a result file that — despite the module it belongs to — is named milstd1553result.txt; the name is a vendor artifact carried over from the suite's MIL-STD-1553 lineage, not an indication of which module is affected. Supplying an over-long, attacker-shaped version of that file overflows a fixed-size stack buffer during the read-back path and overwrites the saved return address. The crash lands with full control of EIP:

EIP  42424242        <- 'BBBB' from the payload
ECX  42424242
     C0000005        <- STATUS_ACCESS_VIOLATION

The published PoC is 1040 bytes and stops at the EIP overwrite. It does not achieve code execution, and it was never intended to — see Exploitability.

Payload anatomy

The PoC's field layout, verified by running the port (py poc/poc_py3.py --layout):

FieldOffsetLengthContent
junk0 / 0x0006000x41 filler
align600 / 0x2588"22221111"
prop608 / 0x2603800x43 filler
imp988 / 0x3dc10"bzhrturlu2"
imp2998 / 0x3e69"aracag" 0x13 "1z"
overwrite1007 / 0x3ef40x42 × 4 → saved return address
buf1011 / 0x3f329shikata_ga_nai decoder stub
total1040sha256 530efb5efef917082e40dcf379f5e0a526375724af18aba6f0270f794f96d066

The EIP offset is 1007. That is not a number you get from !mona findmsp or pattern_offset.rb — it is the sum of five hand-tuned fields. The original PoC was built by widening a crash until the return address moved, not by locating the offset analytically. I am noting this rather than dressing it up: a clean rewrite would find the true distance to the saved return address and drop align, imp, and imp2 entirely, since none of them carry meaning. imp/imp2 are filler strings, not imports.

The decoder stub is inert

buf is a 29-byte msfvenom shikata_ga_nai stub. Disassembled with ndisasm -b32:

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

Two things fall out of this, and both mean the payload can never run:

  1. mov cl,0x1 — the decode loop is configured for a single 4-byte block. There is no real payload behind it, only those 4 bytes.
  2. The \xe2\xf4 (loop) terminator is absent. A complete sgn stub ends the decode loop with loop before the encoded body. Here execution falls straight off add ebx,[eax+0x15] into E9 8B 7C 9C — which at that moment is still encoded, and is not a valid instruction sequence anyway.

So the stub is a placeholder that occupies the tail of the payload. This matches how the PoC was described on Exploit-DB, and it is the honest reading: this is a control-of-EIP demonstration, not a working exploit.

Exploitability (honest assessment)

Weighing this the way a broker or a vendor would, rather than the way the CVSS v3.1 vector does:

  • No privilege boundary is crossed. milstd1553result.txt is a file the application itself produces, in a location the same user already controls. An attacker who can rewrite it can generally already run code as that user. That makes this a robustness bug far more than a security bug.
  • The PoC predates nothing. Control of EIP on a 2020-era x86 build says little on its own. Turning it into execution needs a DEP/ASLR story — a module without /DYNAMICBASE, a ROP chain, or a partial overwrite. None of that was done, and I have not checked what mitigations the current build ships with.
  • It is local, and it needs the operator to load the file. CVSS v4.0's UI:A reflects reality; v3.1's UI:N does not.

If someone wants to make this genuinely interesting, the productive surfaces are not this file at all: the kernel driver DDC ships for its 1553/664 PCIe cards (IOCTL handling → LPE), any network-facing ARINC 664/AFDX frame parsing, and the input file formats the suite consumes from untrusted sources. Those cross real boundaries. This one does not.

Corrections to the published record

The CVE record carries two defects worth stating plainly, since it is published under my name.

1. The cited vendor product is the wrong one

The record's product designation — "dataSIMS Avionics ARINC 664-1 version 4.5.3" — is correct. The affected component is the ARINC 664 module, as stated in my original Exploit-DB title.

The defect is the vendor reference the CNA attached. NVD cites BU-69414, which is DDC's MIL-STD-1553 software product page — a different databus stack from the one this finding affects. ARINC 664 is AFDX (profiled switched Ethernet, ARINC 664 Part 7); MIL-STD-1553 is a 1 Mbps dual-redundant command/response bus. They are unrelated standards.

Download Tool