{"id":1525,"date":"2026-06-30T14:34:53","date_gmt":"2026-06-30T14:34:53","guid":{"rendered":"https:\/\/thedigitalfortress.us\/?p=1525"},"modified":"2026-06-30T14:34:53","modified_gmt":"2026-06-30T14:34:53","slug":"guardfall-exposes-open-source-ai-coding-agents-to-decades-old-shell-injection-risks","status":"publish","type":"post","link":"https:\/\/thedigitalfortress.us\/?p=1525","title":{"rendered":"GuardFall Exposes Open-Source AI Coding Agents to Decades-Old Shell Injection Risks"},"content":{"rendered":"<div>\n<p><span class=\"p-author\"><i class=\"icon-font icon-user\">\ue804<\/i><span class=\"author\">Swati Khandelwal<\/span><i class=\"icon-font icon-calendar\">\ue802<\/i><span class=\"author\">Jun 30, 2026<\/span><\/span><span class=\"p-tags\">AI Security \/ Software Supply Chain<\/span><\/p>\n<\/div>\n<div id=\"articlebody\">\n<div class=\"separator\" style=\"clear: both;\"><a href=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEgR59EidY6iMYv3s9bikjIxpj6_YTaUIesrZ3MyD9OqUbOk262aDW7bCArqr-IjT9CUQUSzE2F_knKKvs4bIJ2d9cuzZ-DKlmkW_Q3SO43HkA79kSVhCELVyKaStWliNZc9l1xxEGEFE5UmT1Abn6XMKTjk-rxBRTTtRAjb-jYDRKj-ODtIYy8dGQvbzDE\/s1700-e365\/shell-ai.jpg\" style=\"display: block;  text-align: center; clear: left; float: left;\"><\/a><\/div>\n<p>The safety check that is supposed to stop an AI coding agent from running a dangerous command can be walked straight past using a shell trick that has been public for decades.<\/p>\n<p>New research from\u00a0<a href=\"https:\/\/adversa.ai\/blog\/opensource-ai-coding-agents-shell-injection-vulnerability\/\">Adversa AI<\/a>, which is named the bypass <b>GuardFall<\/b>, found it works against ten of the eleven popular open-source coding and computer-use agents the firm tested. Only one, \u00abContinue,\u00bb was built to defend against it.<\/p>\n<p>Why does it matter? These agents run shell commands with your full account access. Point one at a booby-trapped repository or software package, and a hidden instruction can quietly run a command that wipes files or steals the secrets your account can reach, from SSH keys and cloud credentials to anything sitting in your home folder.<\/p>\n<h2>How does it get past the guard?<\/h2>\n<p>Most of these agents try to stay safe by checking each command against a blocklist of dangerous patterns before running it. The flaw is that they check the command as plain text, while bash rewrites that text before it actually runs. The shell strips quotes and expands shortcuts, so the filter and the shell end up looking at two different things.<\/p>\n<p>The simplest example: a filter watching for<b>\u00a0rm<\/b>\u00a0sees nothing wrong with\u00a0r\u00bbm, because to a text matcher those are different strings. Bash removes the empty quotes and runs\u00a0rm\u00a0anyway.<\/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>The same idea works in other forms: a command hidden in base64 and piped into a shell, or ordinary tools like\u00a0find\u00a0and\u00a0dd\u00a0turned destructive with the right flag.<\/p>\n<p><a name=\"more\"\/><\/p>\n<p>The researchers call this not a bug but \u00aba dangerous convention and a class of problems,\u00bb which is why adding more blocklist patterns fixes none of it. There is no single CVE to track or patch.<\/p>\n<p>Two things have to line up for an attack to land, and neither is exotic.<\/p>\n<ul>\n<li>First, the AI has to produce the malicious command. A blunt \u00abrun\u00a0rm -rf\u00bb is usually refused, but the same command tucked inside normal-looking work, such as a build file or a tool&#8217;s \u00abdocumentation\u00bb reply, gets emitted as a routine step.<\/li>\n<li>Second, the agent has to be running on its own, with an auto-execute flag turned on or its container sandbox switched off, both of which are routine in automated pipelines. The live tests used Claude Sonnet 4.6.<\/li>\n<\/ul>\n<p>The other ten tools all left the gap open: opencode, Goose, Cline, Roo-Code, Aider, Plandex, Open Interpreter, OpenHands, SWE-agent, and the Hermes project, where the bug first surfaced and is\u00a0<a href=\"https:\/\/github.com\/NousResearch\/hermes-agent\/issues\/36846\">documented in Hermes&#8217;s own issue tracker<\/a>.<\/p>\n<div class=\"separator\" style=\"clear: both;\"><a href=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEgxKbwe1AcFw6GjaTYiNBur5CuuqXoMqeg7cn43vkCXZSvSRuohyeNi0pPxtBemtRq-RkAIOp4sh7XcodvHTRVrIb6_y7unb7Ru1Y1GohyK9vtbilZdTwlPUJCLh235Yf0yOXhMhIi0dwOgeLdicWYLnEujWiMBFfLS1Bdsh9QWiOBbrQdK7J5MqYoMToQ\/s1700-e365\/coding-agent.png\" style=\"display: block;  text-align: center; clear: left; float: left;\"><img decoding=\"async\" src=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEgxKbwe1AcFw6GjaTYiNBur5CuuqXoMqeg7cn43vkCXZSvSRuohyeNi0pPxtBemtRq-RkAIOp4sh7XcodvHTRVrIb6_y7unb7Ru1Y1GohyK9vtbilZdTwlPUJCLh235Yf0yOXhMhIi0dwOgeLdicWYLnEujWiMBFfLS1Bdsh9QWiOBbrQdK7J5MqYoMToQ\/s1700-e365\/coding-agent.png\" alt=\"\" border=\"0\" data-original-height=\"1322\" data-original-width=\"1680\"\/><\/a><\/div>\n<p>The tools in Adversa&#8217;s survey together carried roughly 548,000 GitHub stars as of May 2026. Adversa demonstrated the full attack end-to-end against the production Plandex binary, and the same shape worked against eight others. It describes the work as lab research; no public exploitation has been reported.<\/p>\n<p>Continue, the one agent that held up, defends by reading the command the way bash will before deciding: it breaks the command into the same pieces the shell would, checks what actually runs, and keeps a hard list of destructive commands that are blocked outright.<\/p>\n<div class=\"dog_two clear\">\n<div class=\"cf\"><a href=\"https:\/\/thehackernews.uk\/vpn-threat-report-m\" rel=\"nofollow noopener sponsored\" target=\"_blank\"><img loading=\"lazy\" decoding=\"async\" class=\"lazyload\" alt=\"Cybersecurity\" src=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEhFlTC7RrRZGiFAgASS0noWSL0qsQGFVp8-Hvuw9yp3X3VKRuTcb5SsPX09wJzrdIM6pu1_5lS4EeZp7Sx4iYBpNJkrGnpr08yyaS1HQ5_5TxaCsP6O0OtHNuOkesn6CbNjao1GPulCJk-uljYMSfMZfBYNrngpe669t7jlRn1FqiEnXhsFD1WVkpaYIVgh\/s728-e100\/ai-d.jpg\" width=\"729\" height=\"91\"\/><\/a><\/div>\n<\/div>\n<p>That protection held against every payload in Continue&#8217;s default editor mode. Its command-line auto-run mode is weaker: a few payloads slipped through, though the most destructive ones still hit the hard block. Adversa calls the design portable and says re-implementing it is roughly a two-day job for an experienced engineer.<\/p>\n<h2>What to do now<\/h2>\n<p>None of the quick fixes is a complete answer, but they cut your exposure until a proper guard is in place:<\/p>\n<ul>\n<li>Run agents with\u00a0$HOME\u00a0pointed at a throwaway folder, so secrets like\u00a0~\/.ssh\u00a0and\u00a0~\/.aws\u00a0are out of reach.<\/li>\n<li>Turn off auto-execute flags such as\u00a0&#8211;auto-exec,\u00a0&#8211;auto-run,\u00a0&#8211;auto-test, and\u00a0dangerously-skip-permissions\u00a0unless the job genuinely cannot pause for a human.<\/li>\n<li>Do not let agents run on pull requests from forks, the easy path from an attacker&#8217;s file to your secrets.<\/li>\n<li>Treat config files shipped inside a repository, like\u00a0.aider.conf.yml, as untrusted code; a malicious one can trigger the attack on the first accepted edit.<\/li>\n<\/ul>\n<p>GuardFall lands in the middle of a run of similar findings this year. Adversa&#8217;s own\u00a0<a href=\"https:\/\/adversa.ai\/blog\/trustfall-coding-agent-security-flaw-rce-claude-cursor-gemini-cli-copilot\/\">TrustFall<\/a>\u00a0hit Claude Code, Cursor, Gemini CLI, and Copilot CLI, and a separate\u00a0<a href=\"https:\/\/adversa.ai\/blog\/claude-code-security-bypass-deny-rules-disabled\/\">deny-rule bypass<\/a>\u00a0hit Claude Code.<\/p>\n<p>Attacks like\u00a0AutoJack\u00a0and\u00a0Agentjacking\u00a0turned poisoned content into commands that an agent runs with its owner&#8217;s privileges. The common thread is simple: untrusted text keeps reaching a real shell before the guard understands what bash will actually run.<\/p>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>\ue804Swati Khandelwal\ue802Jun 30, 2026AI Security \/ Software Supply Chain The safety check that is supposed to stop an AI coding agent from running a dangerous command can be walked straight&hellip;<\/p>\n","protected":false},"author":1,"featured_media":1526,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[335,2025,2260,985,2259,525,400,1132,303],"class_list":["post-1525","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-uncategorized","tag-agents","tag-coding","tag-decadesold","tag-exposes","tag-guardfall","tag-injection","tag-opensource","tag-risks","tag-shell"],"_links":{"self":[{"href":"https:\/\/thedigitalfortress.us\/index.php?rest_route=\/wp\/v2\/posts\/1525","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=1525"}],"version-history":[{"count":0,"href":"https:\/\/thedigitalfortress.us\/index.php?rest_route=\/wp\/v2\/posts\/1525\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/thedigitalfortress.us\/index.php?rest_route=\/wp\/v2\/media\/1526"}],"wp:attachment":[{"href":"https:\/\/thedigitalfortress.us\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1525"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/thedigitalfortress.us\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1525"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/thedigitalfortress.us\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1525"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}