{"id":"CVE-2022-35411","aliases":["EUVD-2022-6297","GHSA-8rq8-f485-7v8x","PYSEC-2026-526"],"status":"published","title":"rpc.py vulnerable to Deserialization of Untrusted Data","description":"rpc.py through 0.6.0 allows Remote Code Execution because an unpickle occurs when the \"serializer: pickle\" HTTP header is sent. In other words, although JSON (not Pickle) is the default data format, an unauthenticated client can cause the data to be processed with unpickle.","severity":{"version":"3.1","score":9.8,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H","level":"critical","assessor":"primary","from":"nvd"},"epss":{"day":"2026-11-12","score":0.46647,"percentile":0.98841,"model":"v2026.06.15"},"facts":{"in_kev":false,"known_exploited":false,"public_exploit":true,"fix_available":false},"cwes":["CWE-502","CWE-522"],"published":"2022-07-08T18:07:40Z","modified":"2026-10-28T02:31:05Z","exploits":[{"source":"exploitdb","id":"EDB-50983","title":"rpc.py 0.6.0 - Remote Code Execution (RCE)","type":"remote","platform":"python","date":"2022-07-29","url":"https://www.exploit-db.com/exploits/50983"},{"source":"pocgithub","id":"CSpanias/rpc-rce.py","title":"CSpanias/rpc-rce.py","date":"2025-07-28","url":"https://github.com/CSpanias/rpc-rce.py"},{"source":"pocgithub","id":"Neo-okami/CVE-2022-35411","title":"Neo-okami/CVE-2022-35411","date":"2025-07-16","url":"https://github.com/Neo-okami/CVE-2022-35411"}],"affected":[{"source":"ghsa","ecosystem":"PyPI","package":"rpc-py","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0.4.2"},{"last_affected":"0.6.0"}]}]},{"source":"osv","ecosystem":"PyPI","package":"rpc-py","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0.4.2"},{"last_affected":"0.6.0"}]}],"versions":["0.4.2","0.4.3","0.5.0","0.5.1","0.6.0"]},{"source":"osv","ecosystem":"PyPI","package":"rpc-py","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0.4.2"},{"last_affected":"0.6.0"}]}],"versions":["0.4.2","0.4.3","0.5.0","0.5.1","0.6.0"]}],"products":[{"vendor":"rpc.py_project","product":"rpc.py"}],"references":[{"url":"https://medium.com/%40elias.hohl/remote-code-execution-0-day-in-rpc-py-709c76690c30","tags":["x_refsource_MISC","x_transferred","Exploit","web"]},{"url":"https://github.com/ehtec/rpcpy-exploit","tags":["x_refsource_MISC","x_transferred","Exploit","Third Party Advisory","package","web"]},{"url":"https://github.com/abersheeran/rpc.py/commit/491e7a841ed9a754796d6ab047a9fb16e23bf8bd","tags":["x_refsource_MISC","x_transferred","Patch","Third Party Advisory","fix","web"]},{"url":"http://packetstormsecurity.com/files/167872/rpc.py-0.6.0-Remote-Code-Execution.html","tags":["x_refsource_MISC","x_transferred","Exploit","Third Party Advisory","VDB Entry","web"]},{"url":"https://nvd.nist.gov/vuln/detail/CVE-2022-35411","tags":["advisory"]},{"url":"https://medium.com/@elias.hohl/remote-code-execution-0-day-in-rpc-py-709c76690c30","tags":["web"]},{"url":"https://github.com/abersheeran/rpc.py/issues/22","tags":["web"]},{"url":"https://github.com/advisories/GHSA-8rq8-f485-7v8x","tags":["advisory"]},{"url":"https://github.com/CVEProject/cvelistV5/tree/main/cves/2022/35xxx/CVE-2022-35411.json","tags":["advisory"]},{"url":"https://github.com/abersheeran/rpc.py","tags":["package"]},{"url":"https://pypi.org/project/rpc-py","tags":["package"]}],"sources":{"cve":[{"id":"CVE-2022-35411","description":"rpc.py through 0.6.0 allows Remote Code Execution because an unpickle occurs when the \"serializer: pickle\" HTTP header is sent. In other words, although JSON (not Pickle) is the default data format, an unauthenticated client can cause the data to be processed with unpickle.","status":"published","published":"2022-07-08T18:07:40Z","modified":"2024-08-03T09:36:44.447Z","updated_at":"2026-11-02T14:34:40.275153Z"}],"euvd":[{"id":"EUVD-2022-6297","description":"rpc.py through 0.6.0 allows Remote Code Execution because an unpickle occurs when the \"serializer: pickle\" HTTP header is sent. In other words, although JSON (not Pickle) is the default data format, an unauthenticated client can cause the data to be processed with unpickle.","status":"published","published":"2022-07-08T18:07:40Z","modified":"2024-08-03T09:36:44Z","updated_at":"2026-11-03T03:25:26.818953Z"}],"ghsa":[{"id":"GHSA-8rq8-f485-7v8x","title":"rpc.py vulnerable to Deserialization of Untrusted Data","description":"rpc.py through 0.6.0 allows Remote Code Execution because an unpickle occurs when the \"serializer: pickle\" HTTP header is sent. In other words, although JSON (not Pickle) is the default data format, an unauthenticated client can cause the data to be processed with unpickle.\n\n[Per the maintainer](https://github.com/abersheeran/rpc.py/issues/22), rpc.py is not designed for an API that is open to the outside world, and external requests cannot reach rpc.py in real world use.\n\nA [fix](https://github.com/abersheeran/rpc.py/commit/491e7a841ed9a754796d6ab047a9fb16e23bf8bd) exists on the `master` branch. As a workaround, use the following code to turn off pickle in older versions:\n```\ndel SERIALIZER_NAMES[PickleSerializer.name]\ndel SERIALIZER_TYPES[PickleSerializer.content_type]","status":"published","published":"2022-07-09T00:00:19Z","modified":"2024-04-22T21:11:26Z","cvss":[{"version":"3.1","score":9.8,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H","level":"critical"}],"cwes":["CWE-502","CWE-522"],"updated_at":"2026-11-02T14:37:44.335614Z"}],"nvd":[{"id":"CVE-2022-35411","description":"rpc.py through 0.6.0 allows Remote Code Execution because an unpickle occurs when the \"serializer: pickle\" HTTP header is sent. In other words, although JSON (not Pickle) is the default data format, an unauthenticated client can cause the data to be processed with unpickle.","status":"published","published":"2022-07-08T19:15:08.7Z","modified":"2026-06-17T04:51:47.433Z","cvss":[{"version":"3.1","score":9.8,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H","level":"critical","assessor":"primary"},{"version":"2.0","score":7.5,"vector":"AV:N/AC:L/Au:N/C:P/I:P/A:P","level":"high","assessor":"primary"}],"cwes":["CWE-522"],"updated_at":"2026-11-02T14:07:22.966735Z"}],"osv":[{"id":"GHSA-8rq8-f485-7v8x","title":"rpc.py vulnerable to Deserialization of Untrusted Data","description":"rpc.py through 0.6.0 allows Remote Code Execution because an unpickle occurs when the \"serializer: pickle\" HTTP header is sent. In other words, although JSON (not Pickle) is the default data format, an unauthenticated client can cause the data to be processed with unpickle.\n\n[Per the maintainer](https://github.com/abersheeran/rpc.py/issues/22), rpc.py is not designed for an API that is open to the outside world, and external requests cannot reach rpc.py in real world use.\n\nA [fix](https://github.com/abersheeran/rpc.py/commit/491e7a841ed9a754796d6ab047a9fb16e23bf8bd) exists on the `master` branch. As a workaround, use the following code to turn off pickle in older versions:\n```\ndel SERIALIZER_NAMES[PickleSerializer.name]\ndel SERIALIZER_TYPES[PickleSerializer.content_type]","status":"published","published":"2022-07-09T00:00:19Z","modified":"2026-06-29T12:26:20.712980112Z","cvss":[{"version":"3.1","score":9.8,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H","level":"critical"}],"cwes":["CWE-502","CWE-522"],"updated_at":"2026-11-02T15:46:42.78452Z"},{"id":"PYSEC-2026-526","title":"rpc.py vulnerable to Deserialization of Untrusted Data","description":"rpc.py through 0.6.0 allows Remote Code Execution because an unpickle occurs when the \"serializer: pickle\" HTTP header is sent. In other words, although JSON (not Pickle) is the default data format, an unauthenticated client can cause the data to be processed with unpickle.\n\n[Per the maintainer](https://github.com/abersheeran/rpc.py/issues/22), rpc.py is not designed for an API that is open to the outside world, and external requests cannot reach rpc.py in real world use.\n\nA [fix](https://github.com/abersheeran/rpc.py/commit/491e7a841ed9a754796d6ab047a9fb16e23bf8bd) exists on the `master` branch. As a workaround, use the following code to turn off pickle in older versions:\n```\ndel SERIALIZER_NAMES[PickleSerializer.name]\ndel SERIALIZER_TYPES[PickleSerializer.content_type]","status":"published","published":"2026-06-29T11:50:33.689769Z","modified":"2026-07-01T20:23:04.195521Z","cvss":[{"version":"3.1","score":9.8,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H","level":"critical"}],"updated_at":"2026-11-02T15:52:57.671918Z"},{"id":"CVE-2022-35411","description":"rpc.py through 0.6.0 allows Remote Code Execution because an unpickle occurs when the \"serializer: pickle\" HTTP header is sent. In other words, although JSON (not Pickle) is the default data format, an unauthenticated client can cause the data to be processed with unpickle.","status":"published","published":"2022-07-08T18:07:40Z","modified":"2026-10-28T02:31:05.001803898Z","updated_at":"2026-11-02T15:44:26.195407Z"}]}}
