
Research into systemic PDF417 validation vulnerabilities in AAMVA-compliant ID systems (CVE-2025-31336, CVE-2025-31337, scr1841160)
This repository contains comprehensive security research documenting critical vulnerabilities in AAMVA-standard PDF417 barcode validation systems affecting government IDs, enterprise solutions, and consumer applications. The research includes a fully functional Proof of Concept (PoC) demonstrating systemic flaws in how ID verification systems process driver's license barcodes.
IMPORTANT: This code is provided for security research purposes only. See the LICENSE.md file for allowed usage.
This research was conducted following:
This research demonstrates vulnerabilities assigned:
Base Score: 10.0 (Critical)
Vector: AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:N
Breakdown:
Exploit Example:
// Temporal validation bypass demonstration
let license = CaliforniaLicense::builder()
.birth_date("06201500") // Year 1500 - Medieval era
.validate(); // Returns OK in affected systems
Initial Response: "After investigating this, it looks like you are just spoofing the barcode data. This is a common standard."
Technical Position:
Marketing vs. Reality Gap:
Final Determination: "CISA has decided that this is not a vulnerability as it is an understood risk in the AAMVA DL Standard."
Technical Analysis of CISA's Position: This decision appears to conflate standard limitations with implementation-specific vulnerabilities. The research documented distinct technical issues:
Multi-Layered Vulnerability Classification:
Implementation-Specific Issues Documented:
Missouri ShowMeID bypass evidence
gpg --verify signatures/show_me_id/img.png.asc scan_proof/show_me_id/img.png
Impact: Complete bypass of Missouri's official government ID verification application, demonstrating systemic vulnerabilities in state-level identity verification systems.

gpg --verify signatures/veriscan/california/andrew_before.png.asc scan_proof/veriscan/california/andrew_before.png
gpg --verify signatures/veriscan/california/andrew_after.png.asc scan_proof/veriscan/california/andrew_after.png

gpg --verify signatures/veriscan/arizona/unanimous.png.asc scan_proof/veriscan/arizona/unanimous.png
gpg --verify signatures/veriscan/arizona/unanimous_1.png.asc scan_proof/veriscan/arizona/unanimous_1.png

gpg --verify signatures/veriscan/florida/wendy_synthesized.png.asc scan_proof/veriscan/florida/wendy_synthesized.png

# Verify Georgia bypass evidence
gpg --verify signatures/veriscan/georgia/hire_me_2.png.asc scan_proof/veriscan/georgia/hire_me_2.png

gpg --verify signatures/veriscan/new_jersey/wendy_synthesized.png.asc scan_proof/veriscan/new_jersey/wendy_synthesized.png

gpg --verify signatures/veriscan/south_carolina/slander.png.asc scan_proof/veriscan/south_carolina/slander.png
Texas bypass evidence - demonstrates consistent vulnerability pattern across state implementations
gpg --verify signatures/veriscan/texas/slander.png.asc scan_proof/veriscan/texas/slander.png
Finding: VeriScan accepts birth dates from medieval times (e.g., year 1500) Vendor Response: "Where do you draw the line, especially in just a parser" Technical Counter: Human physiological limits provide clear validation boundaries (max ~122 years)
Finding: Same license number with different names accepted repeatedly Vendor Response: "We would not know if the first or second scan was real" Technical Counter: Pattern detection flags suspicious behavior regardless of which is authentic
Finding: Product marketed as providing "security checks" and "fake ID detection" Vendor Response: "Using only our parsing tool...you are limited to what feature sets you have" Technical Counter: Marketing materials explicitly claim validation capabilities
Finding: CDL (Commercial Driver's License) bypass poses public safety risks Vendor Response: Not specifically addressed Technical Impact: Hazmat/transport credential spoofing potential
Core Technical Issues:
Temporal Validation Failure:
Header-Only Verification:
Static IIN Acceptance:
Root Cause:
Improper validation of PDF417 barcode temporal data fields and subfile markers enables complete synthetic ID generation that bypasses TokenWorks validation systems.
Technical Exploitation Vectors:
Birth Date Field Manipulation:
Subfile Offset Forgery:
The vulnerabilities stem from fundamental gaps in the AAMVA DL/ID-2020 Standard:
Critical Standard Deficiencies:
| System Type | Examples | Impact Level | Validation Bypass |
|---|---|---|---|
| Government ID Apps | Missouri ShowMeID v3.0.14 | Critical | Complete |
| Enterprise Scanners | TokenWorks IDentiFake Plus | High | Temporal/Pattern |
| Consumer Tools | Scannr iOS v4.2.1+ | High | Format-based |
| KYC Platforms | IDScan.net VSCloud | Critical | Authentication |
./
├── Cargo.lock
├── Cargo.toml # Rust project configuration
├── generated_pdf417.png # Example output barcode
├── LICENSE.md # Security Research License
├── README.md # This comprehensive documentation
├── scan_proof/ # Validation evidence and screenshots
│ ├── show_me_id/ # Missouri ShowMeID bypass evidence
│ │ └── img.png
│ └── veriscan/ # VeriScan validation bypasses
│ ├── arizona/ # Arizona license validation tests
│ │ ├── cole_after.png
│ │ ├── cole_before.png
│ │ ├── unanimous_1.png
│ │ └── unanimous.png
│ ├── california/ # California license validation tests
│ │ ├── andrew_before.png
│ │ ├── andrew_after.png
│ │ └── joe_biden.png
│ ├── florida/ # Florida license validation tests
│ │ ├── before.png
│ │ └── wendy_synthesized.png
│ ├── georgia/ # Georgia license validation tests
│ │ ├── hire_me_2.png
│ │ └── lucas_real.png
│ ├── new_jersey/ # New Jersey license validation tests
│ │ ├── ana_real.png
│ │ └── wendy_synthesized.png
│ ├── south_carolina/ # South Carolina license validation tests
│ │ ├── jason_real.png
│ │ └── slander.png
│ └── texas/ # Texas license validation tests
│ └── slander.png
├── signatures/ # PGP signatures for all evidence
│ ├── show_me_id/
│ │ └── img.png.asc
│ └── veriscan/
│ ├── arizona/
│ │ ├── unanimous_1.png.asc
│ │ └── unanimous.png.asc
│ ├── california/
│ │ └── joe_biden.png.asc
│ ├── florida/
│ │ └── wendy_synthesized.png.asc
│ ├── georgia/
│ │ └── hire_me_2.png.asc
│ ├── new_jersey/
│ │ └── wendy_synthesized.png.asc
│ └── south_carolina/
│ └── slander.png.asc
├── vince_coordination/ # CISA VINCE case documentation
│ └── VU396042_thread.pdf # Complete coordination thread
├── scripts/
│ └── barcode_reader.sh # Barcode validation utility
└── src/ # Proof of Concept implementation
├── main.rs # Interactive demonstration program
├── states/ # State-specific implementations
│ ├── california_cdl.rs # California Commercial Driver's License
│ ├── california.rs # California standard license
│ ├── florida.rs # Florida license implementation
│ ├── georgia.rs # Georgia license implementation
│ ├── illinois.rs # Illinois license implementation
│ ├── mod.rs # States module
│ ├── new_jersey.rs # New Jersey license implementation
│ ├── south_carolina.rs # South Carolina license implementation
│ └── texas.rs # Texas license implementation
└── utils/ # Core functionality
├── decoding/ # PDF417 barcode decoding
│ ├── base64_to_str.rs
│ ├── decode.rs
│ ├── errors.rs
│ ├── mod.rs
│ └── tests.rs
└── encoding/ # PDF417 barcode generation
├── encode.rs
└── mod.rs
The fundamental vulnerabilities manifest across multiple layers of the identity verification ecosystem:
Technical Issue: Verification systems validate AAMVA format compliance without authenticating data content or origin.
Impact: Completely synthetic credentials can pass validation if they maintain proper PDF417 structure and state-specific formatting.
Technical Issue: Systems fail to verify that barcode information matches authoritative records at issuing agencies.
Impact: Enables creation of credentials with valid formatting but completely fabricated personal information.
Technical Issue: By calculating technically correct offset values while using synthetic data, fabricated credentials bypass parsing validation.
Impact: Sophisticated attackers can generate credentials that pass both format and basic consistency checks.
Technical Issue: Systems accept physiologically and logically impossible values (medieval birth dates, future issue dates).
Impact: Demonstrates fundamental absence of basic sanity checking in verification workflows.
Technical Issue: Enhanced-security documents like Commercial Driver's Licenses are equally vulnerable to the same exploitation techniques.
Impact: Poses significant public safety risks through potential hazmat/transport credential spoofing.
This research includes comprehensive implementations for seven states, demonstrating consistent vulnerability patterns across different encoding schemes:
california.rs, california_cdl.rs)florida.rs)georgia.rs)illinois.rs)new_jersey.rs)south_carolina.rs)texas.rs)Implementation Note: Modifiable Values
Throughout the state implementations, certain values can be modified without breaking validation:
- '9' sequences: Fields using
999999999can be modified with arbitrary values- 'X' placeholders: Fields using
XXXXXcan be replaced with any characters- Temporal fields: Any dates can be modified, including impossible values (medieval birth dates, future issue dates)
- Personal information: Names, addresses can be completely fabricated
This flexibility highlights the lack of comprehensive data validation in affected systems.
The implementation provides builder patterns for each state:
// Example demonstrating comprehensive validation bypass
use crate::states::california::CaliforniaLicense;
let license = CaliforniaLicense::builder()
.expiration_date("12312030") // Future expiration (accepted)
.last_name("RESEARCH") // Synthetic data
.first_name("TEMPORAL")
.middle_name("BYPASS")
.issue_date("07012025") // Current date
.birth_date("01011500") // Medieval date (accepted by VeriScan)
.sex("1") // Male
.eye_color("BLU") // Blue eyes
.height("070 IN") // Height in inches
.address("123 VALIDATION ST") // Synthetic address
.city("TESTTOWN")
.state("CA")
.zip_code("900010000")
.license_number("T3ST1234") // Synthetic license number
.country("USA")
.weight("150") // Weight in pounds
.hair_color("BRO") // Brown hair
.sequence("99999") // Research sequence number
.issuer_identification_number("636014") // Valid CA IIN
.redundant_eye_color("BLU") // AAMVA redundant field
.alternative_hair_color("BRO") // AAMVA alternative field
.build()
.expect("Failed to build California license");
// Generate barcode that bypasses VeriScan validation
let barcode_data = license.to_barcode();
# Run comprehensive test suite
cargo test
# Execute specific vulnerability demonstrations
cargo test -- --nocapture test_temporal_validation_bypass
cargo test -- --nocapture test_commercial_license_spoofing
cargo test -- --nocapture test_cross_state_consistency
# Generate and test specific state implementations
cargo test -- --nocapture test_california_license
cargo test -- --nocapture test_texas_license
# Clone the repository
git clone https://github.com/coleleavitt/AAMVA-PDF417-Vulnerability-Research.git
cd AAMVA-PDF417-Vulnerability-Research
# Build the project
cargo build --release
# Run the interactive demonstration
./target/release/id-validation-poc
Generated barcodes will be saved as PNG files that can be presented to verification systems for testing:
# Using the provided script to read a generated barcode (requires zbar tools)
./scripts/barcode_reader.sh generated_pdf417.png
Eye Color Standards:
Hair Color Standards:
To verify the authenticity and integrity of this research:
# Import researcher's public key
curl https://keys.openpgp.org/vks/v1/by-fingerprint/2EFAA4791439CF3547A966801ECC2986AF903402 | gpg --import
# Verify research archive integrity
gpg --verify complete-evidence.tar.gz.asc complete-evidence.tar.gz
# Verify individual proof images (examples)
gpg --verify signatures/show_me_id/img.png.asc scan_proof/show_me_id/img.png
gpg --verify signatures/veriscan/california/joe_biden.png.asc scan_proof/veriscan/california/joe_biden.png
gpg --verify signatures/veriscan/arizona/unanimous.png.asc scan_proof/veriscan/arizona/unanimous.png
PGP Fingerprint: 2EFA A479 1439 CF35 47A9 6680 1ECC 2986 AF90 3402
Despite vendor dismissals and CISA case closure, this research maintains responsible disclosure principles:
All findings were validated against:
This research is published in the public interest following extensive coordination efforts. Publication decision factors:
Despite coordination disagreements, the researcher remains available for:
This research is provided under a comprehensive Security Research License. See LICENSE.md for complete terms and conditions.
Research Objective: This research was conducted with the goal of improving security across the identity verification ecosystem. While coordination efforts encountered significant challenges, the technical findings remain valid and require industry attention to protect public safety and national security interests.
Legal Compliance: All research activities comply with applicable laws including the Computer Fraud and Abuse Act (CFAA), Digital Millennium Copyright Act (DMCA), and relevant state and federal identity document regulations. No real personal information was used, and all demonstrations employ clearly marked synthetic research data.
Note: This research was conducted with the goal of improving security across the identity verification ecosystem. While coordination efforts encountered challenges, the technical findings remain valid and require industry attention to protect public safety and national security interests.