
Technical analysis and safety-conscious research harness for CVE-2019-6447 in ES File Explorer for Android
An independently implemented, safety-conscious research harness and technical analysis for CVE-2019-6447, an unauthenticated HTTP service exposed by vulnerable versions of ES File Explorer for Android.
Authorized research only. Use this project only against devices you own or have explicit permission to test. The CLI defaults to a non-invasive TCP probe. Operations that request device data or files require an explicit lab-authorization flag.
| Property | Value |
|---|---|
| Affected product | ES File Explorer File Manager for Android |
| Affected versions | 4.1.9.7.4 and earlier |
| Exposed service | Unauthenticated HTTP server on TCP/59777 |
| Attack prerequisite | Network adjacency to the Android device |
| Impact | Device/app enumeration, arbitrary file read, and application launch |
| Root weakness | CWE-306 — Missing Authentication for Critical Function |
| NVD severity | CVSS 3.1: 8.1 High (AV:A/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N) |
Once the application has been launched, the embedded service can remain reachable on the local Wi-Fi network. It accepts JSON commands without authenticating the caller. This turns an app-internal management interface into a network-accessible attack surface.
flowchart LR
A["Adjacent-network attacker"] -->|"HTTP POST / TCP 59777"| B["Embedded ES HTTP service"]
B --> C["Command dispatcher"]
C --> D["Device and app metadata"]
C --> E["Shared-storage files"]
C --> F["Android app launch"]
For the complete analysis, see docs/technical-analysis.md.
git clone https://github.com/acloudinthebluesky/CVE-2019-6447-ES-File-Explorer.git
cd CVE-2019-6447-ES-File-Explorer
python3 -m venv .venv
source .venv/bin/activate
python -m pip install -e .
esfile-6447 probe --target 192.168.56.10
This only attempts a TCP connection to port 59777. An open port is not, by itself, proof that the target is vulnerable.
esfile-6447 command \
--target 192.168.56.10 \
--name getDeviceInfo \
--i-understand-this-is-an-authorized-lab
esfile-6447 pull \
--target 192.168.56.10 \
--remote-path /sdcard/lab-marker.txt \
--output ./evidence/lab-marker.txt \
--i-understand-this-is-an-authorized-lab
Use synthetic files only. Do not collect personal data as proof of impact.
Defenders can hunt for unexpected listeners on TCP/59777 and HTTP requests containing JSON command fields. Network controls can reduce exposure, but the durable fix is to remove or upgrade the vulnerable application. Embedded management services should bind to loopback unless remote access is essential, authenticate every request, authorize each operation, and terminate when no longer required.
python -m unittest discover -s tests -v
The tests start a loopback-only mock HTTP server. They do not contact external hosts.
This project is intended for defensive validation, education, and authorized vulnerability research. It deliberately omits subnet scanning and defaults to a connectivity-only probe. Accessing a device without permission may violate law and policy even when no files are retained.
The vulnerability discovery and original public proof of concept are credited to the researchers referenced above. The implementation in this repository is an independent educational reimplementation.