Malformed Bluetooth packets
Written in Rust, packets must match an exact size and format, and the parser is tested against 200,000 random packets.
At work and in what I build. Click through a real threat model, then try to break this site.
I secure commercial aircraft systems as a Product Security Engineer II and Backup Team Lead at Boeing, helping them meet FAA and EASA airworthiness and cybersecurity requirements. That work stays private, so this page shows how I think through the things I can share.
Leading assessments of aircraft systems against FAA and EASA requirements.
Scanning with Nessus and Nmap, triaging findings, and driving critical exposures to remediation.
Log analysis and archive reviews that resolve airline Service Requests.
Certificate Signing Requests and SSL/TLS configuration for web applications.
EarDeck is my free, open source AirPods tray app for Windows, built in Rust. Any Bluetooth device in range can broadcast anything and pick any name, so the main threat is someone nearby. Pick a side of the attack surface to see what could go wrong there and what stops it.
Written in Rust, packets must match an exact size and format, and the parser is tested against 200,000 random packets.
Pairing only happens when you pick a device. Only AirPods and Beats names are accepted, and EarDeck refuses any device that asks for a PIN.
Broadcasts must match your model and be close by. Auto-pause only runs while your AirPods are connected and are the current output.
Names are escaped, and the content security policy blocks inline and remote scripts.
Navigation is blocked, and the popup can only load the pages built into the app.
It gets only the permissions it needs, and the backend checks inputs itself.
The Open at Login path is quoted, which stops unquoted path attacks.
Cleared when the app starts.
Values are range checked when loaded.
cargo audit runs on every change and weekly, and Dependabot proposes updates.
A threat model that claims to stop everything isn't telling the truth, so these are written down too.
In aviation, security has to be shown to a regulator, not just claimed. These are the public standards and tools behind my work.
The airworthiness security process: how aircraft security gets planned and shown during certification.
The methods and considerations that put the airworthiness security process into practice.
Software considerations for airborne systems and equipment certification.
Airworthiness and cybersecurity requirements, including continued airworthiness once aircraft are in service.
A security engineer's website should practice what it preaches. GitHub Pages doesn't let me set response headers, so every defense here has to work from the page itself. For example, the Content Security Policy lives in a meta tag at the top of each page.
Every page starts from default-src 'none' and only allows what it needs.
All scripts and styles ship as files, so the policy never needs 'unsafe-inline'.
Even the font and icons are self-hosted, so no outside stylesheet or script can change under me.
GitHub enforces HTTPS, and every .dev domain is on the browser HSTS preload list.
The status badge asks a separate signed-heartbeat service, never my home server, so this site opens no path into my network.
A standard RFC 9116 file tells researchers how to reach me.
CodeQL checks the site's JavaScript on every change and weekly.
A ZAP baseline scan runs against a local copy of the site on every change and weekly.
GitHub Actions are pinned to exact commits, and Dependabot proposes updates.
Clickjacking protection, a few hardening headers, and violation reports need real response headers, which GitHub Pages can't send.
Press the button and this page will attack itself four ways. The results come from your own browser as it runs them, so nothing here is canned.
I practice the same habits in my homelab: IoT devices kept on their own segmented network, WireGuard for remote access, a Pi-hole DNS sinkhole, and services behind a reverse proxy with TLS.
Read the homelab case studyIf you find a security problem on this site, please email admin@diegoarivada.dev with the steps to reproduce it. This is a personal site, so there's no bug bounty, but I read every report.
For EarDeck, please use GitHub's private vulnerability reporting.