CVE-2026-104736 — LearnPress ≤4.4.10 Unauthenticated PHP Object Injection (checkout-email)
October 18, 2026 · 338 views
LearnPress WordPress LMS ≤4.4.10: guest lp-ajax=checkout stores checkout-email in LP session → maybe_unserialize on read (CWE-502). POP/RCE if gadgets exist. Fixed 4.4.11. Python PoC: check, exploit, course discovery, CHAINS.md. CVSS 9.8 Critical unauth.
Description
Overview
CVE-2026-104736 — LearnPress WordPress LMS plugin — unauthenticated PHP object injection via guest checkout AJAX (CWE-502).
| | |
|---|---|
| Affected | ≤ 4.4.10 |
| Fixed | 4.4.11+ |
| CVSS | 9.8 Critical |
| Auth | None (guest checkout:nopriv) |
| Vector | lp-ajax=checkout, parameter checkout-email |
LearnPress uses lp-ajax (not only admin-ajax.php?action=). Vulnerable builds call session->set('checkout-email', ...) from the request, then LP_Helper::maybe_unserialize() on session read — attacker-controlled serialized objects → POP (RCE when suitable gadgets exist).
PoC page: https://pocbit.org/pocs/cve-2026-104736
GitHub: murrez/CVE-2026-104736
CVE.org: CVE-2026-104736
Note: 4.4.10 may sanitize_email on checkout-email, which can strip raw serialized blobs — confirm in lab (session DB / probe). See CHAINS.md in bundle for phpggc / chain notes.
Bundled tool (Python 3.10+)
Download cve-2026-104736.py — writes poc.py, learnpress_core.py, CHAINS.md, tests/.
python cve-2026-104736.py
pip install -r requirements.txt
python poc.py --mode check -u https://lab.local
python poc.py -u https://lab.local
python poc.py -f targets.example.txt --mode check -j 20
python -m unittest discover -s tests -t . -v
Modes: check (readme/version fingerprint), exploit (course discovery, cart prep, multi-URL inject, session trigger). Harmless stdClass probe documented in README.
Mitigation
- Upgrade LearnPress to ≥ 4.4.11.
- WAF: monitor
lp-ajax=checkoutPOSTs with serialized patterns incheckout-email. - Reduce plugin attack surface; audit other LMS/checkout plugins similarly.
Legal and ethical use
Authorized security research and patch validation only.
References
Related PoCs
Same platform, vendor, or tags — explore more write-ups on Pocbit.
- WordPressCVE-2026-92966critical
CVE-2026-92966 — WordPress LatePoint ≤5.7.0 Stored Shortcode Execution (Customer Cabinet)
LatePoint appointment booking ≤5.7.0: unauthenticated guest booking stores [shortcode] in customer first/last name (sanitize_text_field keeps brackets); Customer Cabinet block renders welcome line then the_content do_shortcode runs twice → arbitrary shortcode execution. CVSS 9.1 Critical (CWE-94). Fixed in 5.7.1. No API key. Python PoC: check, mass exploit, --lab, optional POCBIT_EXEC_SHORTCODE. Marker POCBIT-92966-OK.
- WordPressCVE-2026-96349critical
CVE-2026-96349 — WordPress SiteSkite ≤2.1.8 API-Key Autologin + MCP eval() RCE Chain
SiteSkite WordPress plugin ≤2.1.8: long-lived API key acts as unauthenticated admin bearer via ?token= autologin; REST/admin-ajax MCP abilities run siteskite_execute_php (eval) and file write. CVSS 10.0 Critical (CWE-94). Fixed in 2.2.0. Python PoC: check (readme ≤2.1.8), exploit with API key, mass hits/exploited, --lab. Marker POCBIT-96349-OK.
- WordPressCVE-2026-18143critical
CVE-2026-18143 — Addify Request a Quote for WooCommerce Unauthenticated File Upload
Unauthenticated arbitrary file upload (CWE-434, CVSS 9.8 Critical) in Request a Quote for WooCommerce ≤ 2.9.2 via public AJAX afrfq_submit_quote_via_popup — unsafe move_uploaded_file() with attacker-controlled .php names into web-accessible RFQ temp storage. Requires popup quote rule on the storefront.
- WordPressCVE-2026-89079critical
CVE-2026-89079 — Theme My Login WordPress Multisite Unauthenticated Password Overwrite (ATO)
Theme My Login ≤7.2.1 on WordPress multisite with network tml_user_passwords: lost-password retrieve_password() path applies attacker user_pass1 via tml_ms_filter_pre_insert_user_data → wp_update_user (CWE-269). CVSS 3.1 9.8. Not version-only. Python PoC: check, verify, exploit, bulk. Fixed 7.2.2.