{"id":1093,"date":"2026-05-29T16:51:15","date_gmt":"2026-05-29T16:51:15","guid":{"rendered":"https:\/\/thedigitalfortress.us\/?p=1093"},"modified":"2026-05-29T16:51:15","modified_gmt":"2026-05-29T16:51:15","slug":"attackers-use-llm-agent-for-post-exploitation-after-marimo-cve-2026-39987-exploit","status":"publish","type":"post","link":"https:\/\/thedigitalfortress.us\/?p=1093","title":{"rendered":"Attackers Use LLM Agent for Post-Exploitation After Marimo CVE-2026-39987 Exploit"},"content":{"rendered":"<div>\n<p><span class=\"p-author\"><i class=\"icon-font icon-user\">\ue804<\/i><span class=\"author\">Ravie Lakshmanan<\/span><i class=\"icon-font icon-calendar\">\ue802<\/i><span class=\"author\">May 29, 2026<\/span><\/span><span class=\"p-tags\">Vulnerability \/ Artificial Intelligence<\/span><\/p>\n<\/div>\n<div id=\"articlebody\">\n<div class=\"separator\" style=\"clear: both;\"><a href=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEi20dgnD8cZh6NCcPM9Xa3fzLgNygU4O6AmBUmN1w6KwsDMJ8_jkpZPk77r8phf3MX-cXOlVxke-ypIuj2xh3AB3dy1HSuIa4YYFlgH8Odm1jCRVESBGqxgiDoRbQEG4L_QrKOoH8TSvLLKZxnBfPEemz4kaqWto4t_3cZCmWW44NX-Q1aWakBWVDhAza7T\/s1700-e365\/marimo.png\" style=\"display: block;  text-align: center; clear: left; float: left;\"><\/a><\/div>\n<p>An unknown threat actor has been observed using a large language model (LLM) agent to conduct post-compromise actions after obtaining initial access following the exploitation of a publicly-accessible Marimo network using a recently disclosed vulnerability.<\/p>\n<p>\u00abThe attacker compromised an internet-reachable Marimo notebook via CVE-2026-39987, extracted two cloud credentials from the compromised host, replayed them through a fanned-out egress pool to retrieve an SSH private key from AWS Secrets Manager, and used that key to drive eight short SSH sessions against a downstream SSH bastion server,\u00bb Sysdig <a href=\"https:\/\/www.sysdig.com\/blog\/ai-agent-at-the-wheel-how-an-attacker-used-llms-to-move-from-a-cve-to-an-internal-database-in-4-pivots\">said<\/a>.<\/p>\n<p>\u00abThe bastion phase exfiltrated the schema and full contents of an internal PostgreSQL database in under two minutes.\u00bb<\/p>\n<p>CVE-2026-39987 refers to a critical pre-authenticated remote code execution vulnerability impacting all versions of Marimo prior to and including 0.20.4. It allows an unauthenticated attacker to execute arbitrary system commands. The issue was addressed in version 0.23.0, released last month.<\/p>\n<div class=\"dog_two clear\">\n<div class=\"cf\"><a href=\"https:\/\/thehackernews.uk\/threatlabz-vpn-risk-2026-d\" rel=\"nofollow noopener sponsored\" target=\"_blank\"><img loading=\"lazy\" decoding=\"async\" class=\"lazyload\" alt=\"Cybersecurity\" src=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEhnNON5UeWywT7OcPNw7V4L7QNWnCnm7Xl_99Y9ek8dL-gRwx-bWxQM1TKqt8deqqrdpUyKMuuijAWyyPQVB0s0qf8ntQ6ldFAJLru-QUWhddKTopc7SeNbBBnd-TsfFyRPP-AAyDuclLlL6XHK4_LXqDC_7eyaz9pzToYr7U543MhrJ7qcK-89sVWHTQUZ\/s728-e100\/zz-2-d.jpg\" width=\"729\" height=\"91\"\/><\/a><\/div>\n<\/div>\n<p>The security defect has since come under active exploitation, with threat actors using it to initiate manual reconnaissance against honeypot systems and attempt to harvest sensitive data.<\/p>\n<p><a name=\"more\"\/><\/p>\n<p>The latest activity documented by Sysdig sticks to the same pattern, the primary difference being that an LLM agent was used to drive the post-exploitation activity. The incident, per the cloud security firm, was recorded on May 10, 2026, with the attacker gathering credentials from the environment and then using the harvested AWS access key to perform API calls against AWS Secrets Manager and retrieve an SSH private key.<\/p>\n<p>Minutes later, the threat actor is said to have carried out the first SSH authentication on the SSH bastion server using the retrieved key, followed by launching eight parallel SSH sessions against the downstream server to siphon an internal PostgreSQL database. The end-to-end attack chain lasted a little over an hour.<\/p>\n<div class=\"separator\" style=\"clear: both;\"><a href=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEiH-MY_htjAW6jvtjkdGQ-KwjZ2-_Ezb3U9Pk-gRzUX4l-S2i04o5V1Kv3wFGd0PhCsvSK10v_esN1ImCnR6SwbeLekge0iKJY-Et3-6NJlgW-Ytr5KsKRfUKwKYS1L0em-VfIXg2NU2XMWiMSgcOPDyBrBdoyENbt4q2snVPhdvwb7AOGFW4a_fGxUcREo\/s1700-e365\/llm.png\" style=\"clear: left; display: block; float: left;  text-align: center;\"><img decoding=\"async\" src=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEiH-MY_htjAW6jvtjkdGQ-KwjZ2-_Ezb3U9Pk-gRzUX4l-S2i04o5V1Kv3wFGd0PhCsvSK10v_esN1ImCnR6SwbeLekge0iKJY-Et3-6NJlgW-Ytr5KsKRfUKwKYS1L0em-VfIXg2NU2XMWiMSgcOPDyBrBdoyENbt4q2snVPhdvwb7AOGFW4a_fGxUcREo\/s1700-e365\/llm.png\" alt=\"\" border=\"0\" data-original-height=\"507\" data-original-width=\"1597\"\/><\/a><\/div>\n<p>Sysdig said it uncovered four indicators that an LLM agent was behind the activity. First, the attacker improvised a database dump without any prior knowledge of the schema. Second, a Chinese-language planning comment, \u00ab\u770b\u8fd8\u80fd\u505a\u4ec0\u4e48\u00bb translating to \u00abSee what else we can do\u00bb leaked directly in the command stream when executing a credential search.<\/p>\n<p>\u00abThe database hostname was opaque, with no application identifier on disk and no schema dump pre-staged, yet the chain still landed on a credential table within minutes,\u00bb Sysdig said. \u00abThe attacker no longer needs to see your environment to operate inside it.\u00bb<\/p>\n<p>The third sign is that every command is designed for machine consumption, with each command separated by a \u00ab&#8212;\u00bb delimiter, along with bounded output captures, disabling the \u00abless\u00bb command, and discarding the error stream (stderr) to minimize noise.<\/p>\n<p>Lastly, the value handoffs are obtained from prior tool output. In other words, the manner in which certain values, say, database passwords, were extracted implies an AI agent feeding its own previous output &#8212; running a cat command of the \u00ab~\/.pgpass\u00bb file &#8212; into the next action.<\/p>\n<div class=\"dog_two clear\">\n<div class=\"cf\"><a href=\"https:\/\/thehackernews.uk\/ai-cant-stop-d\" rel=\"nofollow noopener sponsored\" target=\"_blank\"><img loading=\"lazy\" decoding=\"async\" class=\"lazyload\" alt=\"Cybersecurity\" src=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEjPEV6-530TOlxG6PjrmdlY623wpBwduZ7t1HV6flcmO5R4q4AmfixDUzW0CrhlvMVNWbhvOIso-UDNTka4W_W9Chrdj_dglwBZwi7DuePM2IMIl-hfUYVIqBXgfpr_2619K8Gptb4LzwJ6gUbi7lWl2M8AFQJsHEaw63Q7tZ6708YGruiHrr0Y2W9YYxLQ\/s728-e100\/ThreatLocker-d.png\" width=\"729\" height=\"91\"\/><\/a><\/div>\n<\/div>\n<p>In another instance, a cat command to print the contents of a specific file (\u00abcat ~\/.ssh\/id_ed25519\u00bb) is preceded by an ls (\u00ablist\u00bb) command that passes the same file pattern as input (\u00abls -la ~\/.ssh\/id_ed25519*\u00bb) to confirm that the SSH Key exists.<\/p>\n<p>\u00abWhen a scripted operator builds a per-target playbook and reuses it, the bar to adding a new target is engineering time,\u00bb Sysdig concluded. \u00abHowever, an agent operator carries general priors about a class of applications and composes the chain live to best fit its target. Here, the bar becomes inference budget, not playbook authorship.\u00bb<\/p>\n<p>\u00abThe defender-relevant property of an agent-in-the-loop is adaptiveness. A scripted attacker hits a missing file, an unexpected schema, or an authentication failure and either aborts or falls through to a hard-coded fallback. An agent reads the surprise, decides what to try next, and keeps going.\u00bb<\/p>\n<p>To counter this threat, it&#8217;s recommended that users update to the latest version of Marimo, audit environments for any publicly-accessible instances, and rotate credentials, API keys, and SSH keys.<\/p>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>\ue804Ravie Lakshmanan\ue802May 29, 2026Vulnerability \/ Artificial Intelligence An unknown threat actor has been observed using a large language model (LLM) agent to conduct post-compromise actions after obtaining initial access following&hellip;<\/p>\n","protected":false},"author":1,"featured_media":1094,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[683,622,1166,120,140,1165,1841],"class_list":["post-1093","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-uncategorized","tag-agent","tag-attackers","tag-cve202639987","tag-exploit","tag-llm","tag-marimo","tag-postexploitation"],"_links":{"self":[{"href":"https:\/\/thedigitalfortress.us\/index.php?rest_route=\/wp\/v2\/posts\/1093","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/thedigitalfortress.us\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/thedigitalfortress.us\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/thedigitalfortress.us\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/thedigitalfortress.us\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1093"}],"version-history":[{"count":0,"href":"https:\/\/thedigitalfortress.us\/index.php?rest_route=\/wp\/v2\/posts\/1093\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/thedigitalfortress.us\/index.php?rest_route=\/wp\/v2\/media\/1094"}],"wp:attachment":[{"href":"https:\/\/thedigitalfortress.us\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1093"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/thedigitalfortress.us\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1093"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/thedigitalfortress.us\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1093"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}