Technical assessment
A Python 3 exploit script (poc/poc.py) that performs host header poisoning against Frappe Framework's magic login link feature. It forges the Host header when requesting a login link, captures the resulting poisoned link from a mail sink, extracts the one-time key, and replays it against the real site to obtain a victim session, achieving full account takeover.
Backdoor review
No backdoor observed in reviewed code
The PoC is a straightforward exploit for CVE-2026-47194, a Host header poisoning vulnerability in Frappe. The Python script (poc/poc.py) performs the disclosed attack steps: requesting a magic login link with a forged Host header, extracting the poisoned link from a mail sink, and replaying the captured key against the real target to achieve account takeover. All network requests target the operator-supplied target_url and mailpit_url. No hidden, unrelated, or deceptive behavior is present. The code is clear, well-commented, and its actions align exactly with the documented vulnerability and attack chain.
Model confidence100%
AuthenticationNot required
Languagespython
Target softwarefrappe
Attack typeshost header poisoningaccount takeover
Evidence & reasoningClassification basis · observed behavior · safety review
Technical evidenceClassification basis and observed behavior
Classification basis
The primary artifact poc/poc.py is a standalone script that actively exploits the vulnerability by forging the Host header, capturing the login key, and replaying it to take over a victim account. It does not merely detect or report the vulnerability; it exercises the full attack chain to achieve account takeover.
poc/poc.py:1-174README.md:45-55Requirements
- Target Frappe site must have login_with_email_link enabled (default) and no host_name pinned in site config.
README.md:21-30 - Attacker must know a valid victim email address on the target site.
poc/poc.py:38-40 - Attacker must control a host to receive the poisoned link and have access to a mail sink (e.g., Mailpit) to capture the email.
poc/poc.py:38-44
Observed behavior
- Sends an unauthenticated POST request to /api/method/frappe.www.login.send_login_link with a forged Host header and the victim's email.
poc/poc.py:123-128 - Polls a mail sink API to retrieve the magic login link emailed to the victim and extracts the one-time key.
poc/poc.py:88-110 - Verifies the link host matches the attacker-controlled host, confirming successful poisoning.
poc/poc.py:140-148 - Replays the captured key against the real target site to obtain a session cookie (sid) and confirms the session belongs to the victim via get_logged_user.
poc/poc.py:150-170
Safety-review evidenceBehaviors behind the backdoor verdict
Observables
- Url
- http://127.0.0.1:8080Example target URL in README.md; operator-supplied at runtime.
README.md:96 - Url
- http://127.0.0.1:8025Example mail sink URL in README.md; operator-supplied at runtime.
README.md:96 - Url
- http://evil.attacker.tldExample attacker-controlled host used in the Host header poisoning; operator-supplied at runtime.
README.md:96
Review boundariesWhat the analysis did not establish
- Evidence includes only three text files (README.md, poc/poc.py, poc_verification_report.md) out of 13 total files in the artifact; 10 files are unclassified and not analyzed.
- The exploit script relies on a mail sink (Mailpit) to capture the poisoned email, which is a lab convenience; real-world exploitation would require the attacker to intercept the victim's email or control the attacker host to receive the click.
- Binary files (e.g., Dockerfiles, shell scripts) were not inspected as they were flagged as metadata-only and not included in the text evidence.
- The review is limited to the three text files provided; other files in the repository unit were not analyzed.
Model interpretationThis review is limited to the supplied PoC code and context. It does not assert that the code works or is safe to execute.