WiFi signals shift as people move through a space.
Enough to sense motion through a wall, and — from the way a person moves — to tell who they are. All from feedback the router broadcasts in the clear.
Wallflower is a WiFi-sensing lab that reproduces BFId — a 2025 attack showing that the beamforming feedback ordinary routers send, unencrypted, is enough for a passive observer to identify a person from the way they move. It captures that feedback, parses it, and trains a classifier, reproducing the attack end to end to test how well it holds up.
What leaks
To aim its signal at you, a WiFi router needs your device to report back how the radio channel looks from where you stand. That report — Beamforming Feedback Information, a compressed matrix of steering angles — is sent in the clear, even on an encrypted network. It is not your traffic, your password, or your MAC address. It is a description of the space between you and the router, updated many times a second.
Your body perturbs that space, and it does so in a way that is specific to you — your gait, your build, the way you move through a room. A passive listener who records that feedback while you move can recover your identity — that is what the research shows. Wallflower rebuilds that pipeline end to end to see how well it holds.
The detector, live
Three short captures of the live dashboard reading real WiFi from the lab AP. Still is dark; movement lights up.
These are the live dashboard on a real RSSI capture from the lab access point — the same detection path throughout (band-pass → motion energy → auto-calibrated threshold → hysteresis), so every verdict on screen is the detector's, not staged. The localization view derives movement from three router feeds as their energy-weighted centroid. The access point's identifiers are redacted.
From capture to identity
- 01 Capture. A multi-node rig records synchronised BFI and ground-truth CSI as a subject moves, from several perspectives at once.
- 02 Parse. Raw beamforming frames and CSI are dequantised and segmented into ML-ready, variable-length time series against one fixed feature contract.
- 03 Classify. A baseline LSTM learns to map a motion trace back to an identity — and shows how the reproduction stacks up against the paper.
The paper this reproduces
BFId: Identity Inference Attacks Utilizing Beamforming Feedback Information
ACM CCS '25 · Taipei · October 2025 · doi:10.1145/3719027.3765062 · CC BY 4.0
The authors report identity inference from normal walking at up to 99.5% ± 0.38 accuracy, evaluated on WiFi recordings of 197 individuals across walking styles and viewing angles. That figure is the paper's result on its own dataset — the target Wallflower measures itself against, not a claim about this code.
Why build the attack
-
Verify the claim
A near-perfect identification result deserves an independent pipeline. Building the attack from scratch confirms the finding instead of just restating it.
-
One feature contract
Feature dimensions, naming, and on-disk schema live in a single source of truth, so capture, parsing, and models can never quietly drift apart.
-
Real data only
Synthetic traces exist to test the plumbing and are always labelled as such. A result is only a result when it comes from a real capture.
-
Passive by design
The attack needs no association and no network access — it only listens to feedback the router already broadcasts. Nothing on your own devices would ever show it happening.
-
Multi-perspective
Several synchronised viewpoints capture the same movement at once, matching the paper's setup and exposing how perspective changes what leaks.
-
Explainable pieces
Capture agents, decoders, the motion dashboard, and the classifier are separable and inspectable — no single opaque black box.
The lab
- Signal
- 802.11ac/ax/be Beamforming Feedback Information, captured passively alongside ground-truth CSI
- Rig
- Multi-node capture — perspective radios, a passive recorder, a traffic driver, and an SSH orchestrator
- Model
- Baseline LSTM identity classifier over variable-length motion traces
- Stack
- Python — stdlib on the capture nodes; NumPy and PyTorch for parsing and models
- Status
- Research reproduction — a lab for studying the attack, not a product
- Source
- Private repository — github.com/punklabs-ai/wallflower