A Kasa Camera Answered One Packet With Its Owner's Location

2 months ago

A single unauthenticated packet to a Kasa Spot EC71 camera came back with the owner's precise home coordinates. It's patched now. The interesting part is how long it lasted.

Ask

Ask about this presentation

Answers are generated from this presentation.

Chapters

  1. 0:00A Kasa Camera Answered One Packet With Its Owner's Location
  2. 0:11Twenty-nine bytes in. Latitude and longitude out.
  3. 0:31But it only works from inside your network.
  4. 0:42Except the camera doesn't have to be yours.
  5. 1:06The missing authentication was public in 2016.
  6. 1:34The whole disagreement is one letter.
  7. 1:56Fix the class, not the instance.
Show transcript

A Kasa Camera Answered One Packet With Its Owner's Location

A security advisory on the Kasa Spot EC71 — disclosed, acknowledged, and patched
security advisory TP-Link Kasa EC71 CVE-2026-13230 patched 2.4.1

A single unauthenticated packet to a Kasa Spot EC71 camera came back with the owner's precise home coordinates. It's patched now. The interesting part is how long it lasted.

Twenty-nine bytes in. Latitude and longitude out.

The request
{"system":{"get_sysinfo":{}}}
→  udp/9999
29 bytes no token no session no pairing
Response shape — representative
"longitude": -XX.XXXXXX,
"latitude": XX.XXXXXX,
"oemId": "REDACTED",
"hwId": "REDACTED",
"deviceId": "REDACTED",
"mac": "XX:XX:XX:XX:XX:XX",
"mic_mac": "XXXXXXXXXXXX",
"alias": "<user label>",
"sw_ver": "2.3.26 Build 20240425"
Field names as listed in the advisory, in published order, with values redacted. Not a capture of any device's reply.
The only protection is a trivial XOR cipher — “Wireshark natively decodes” it as cleartext
Kasa Spot EC71 security advisory, Finding 3 · CVE-2026-13230

The request is twenty-nine bytes, sent to port nine nine nine nine. No token, no session, no pairing. What comes back is a JSON blob carrying the owner's longitude and latitude. The only protection is a trivial XOR cipher that Wireshark reads as cleartext.

But it only works from inside your network.

Early reactions
This only works from inside the local network.
If someone is already on your Wi-Fi, they arguably know where you live.
LAN ONLY

There's a fair objection, and early reactions raised it quickly. This only works from inside the local network. If someone's already on your Wi-Fi, they arguably know where you live.

Except the camera doesn't have to be yours.

Confirmed on firmware 2.3.26 — a factory reset does not clear user data from flash
1
Buy a used EC71
2
Soft-AP setup mode: udp/9999 returns the previous owner's GPS
3
A ~$3 SPI programmer: plaintext email + unsalted MD5
4
Crack the hash
5
One TP-Link ID spans Kasa · Tapo · Deco · VIGI · Omada
mitigated in 2.4.1
Advisory § Secondary Market Risk · tp-link.com/us/support/faq/1439

Except the camera doesn't have to be yours. A factory reset didn't clear the user data. Buy a used one, send the same packet, and it returns the previous owner's coordinates. A three dollar programmer then pulls their account email and an unsalted MD5 of their password. And that login covers Tapo, Deco, VIGI and Omada. All of it is fixed in current firmware.

The missing authentication was public in 2016.

Jul 2016
No-auth port 9999 documented publicly
Aug 2020
Same GPS exposure written up on a sibling camera
Nov 2020
Same class fixed in the smart-plug line
Sep 2023
Geofencing launches
Apr 2024
EC71 firmware still ships it
Jul 2026
Patched
“port 9999 and uses a trivial XOR autokey encryption that provides no security.”
“There is no authentication mechanism…”
softScheck, tplink-smartplug README, 2016 · Apache-2.0

None of this was secret. In twenty sixteen, a reverse-engineering write-up documented the same port, the same trivial cipher, and no authentication mechanism at all. What followed, the advisory says, was targeted, incremental remediation rather than a comprehensive architectural review. The smart plug line lost its local interface in twenty twenty. Camera firmware built in April twenty twenty-four still shipped the behaviour.

The whole disagreement is one letter.

Published vector, CVE-2026-13230
CVSS:4.0/AV:A/AC:L/AT:N/PR:N/UI:N/VC:L/VI:N/VA:N/SC:N/SI:N/SA:N
5.3 Medium assigned by TP-Link, the CNA
VC:L → VC:H 7.1 High the researcher's rating — same vector, one field changed
“NVD assessment not yet provided.”
NVD record for CVE-2026-13230: NIST NVD shows N/A and 'NVD assessment not yet provided.'; CNA TPLink shows CVSS-B 5.3 MEDIUM with the full 4.0 vector string
NVD, CVE-2026-13230 — AWAITING ENRICHMENT · Jul 14 2026

The two sides scored it differently, and the gap is one value. TP-Link rated the location leak five point three, medium, calling the confidentiality impact low. Flip that one field to high, leave the rest of the vector alone, and the formula returns seven point one, the researcher's number. The national vulnerability database's own assessment, in its own words, is not yet provided.

Fix the class, not the instance.

Firmware 2.4.1
GPS coordinates removed from the get_sysinfo response
Firmware 2.4.1
Port 9999 no longer answers unauthenticated requests
AFFECTED: KASA EC70 V4 · EC71 V4
tp-link.com/us/support/faq/5192
github.com/BadChemical/IoT-Vulnerability-Research-Public

Current firmware removes the coordinates and stops the port answering unauthenticated requests. The part worth keeping isn't the camera. It's the difference between fixing an instance and fixing a class.