Zum Hauptinhalt springen
Echtzeit-Radar & Feeds
Alle RSS Feeds ➔
👥 Community & Social
Windows Tipps & SecurityUbuntu 26.10 adds a Windows-style window snapping panel(25.09.2026 um 00:01 Uhr)
•
AI & KI NachrichtenJulian Goldie SEO: OpenAI Just Dropped Two New GPT-6 Models(25.09.2026 um 01:00 Uhr)
•
KI & AI VideosPatrick Collison on Claude Code at Stripe(25.09.2026 um 00:57 Uhr)
••
AI & KI Nachrichtendeleting-the-trace(24.09.2026 um 23:28 Uhr)
•
IT Security ToolsAjar(25.09.2026 um 00:29 Uhr)
•••
AI & KI NachrichtenGitHub Release: openai/codex vrust-v0.158.0-alpha.11 (25.09.2026)(25.09.2026 um 01:32 Uhr)
••
Windows Tipps & SecurityUbuntu 26.10 adds a Windows-style window snapping panel(25.09.2026 um 00:01 Uhr)
•
AI & KI NachrichtenJulian Goldie SEO: OpenAI Just Dropped Two New GPT-6 Models(25.09.2026 um 01:00 Uhr)
•
KI & AI VideosPatrick Collison on Claude Code at Stripe(25.09.2026 um 00:57 Uhr)
••
AI & KI Nachrichtendeleting-the-trace(24.09.2026 um 23:28 Uhr)
•
IT Security ToolsAjar(25.09.2026 um 00:29 Uhr)
•••
AI & KI NachrichtenGitHub Release: openai/codex vrust-v0.158.0-alpha.11 (25.09.2026)(25.09.2026 um 01:32 Uhr)
••
Intelligence View
⚡ tsecurity.de Intelligence

My agent guardrail denied a Python docstring as an attempted transaction

Yesterday I published a postmortem about my own guardrail blocking me from writing a Markdown file. The two-axis fix I proposed there — classify the argument, but also ask whether the tool can act on it — was the right shape and the wrong r…

0
↗ Quelle (dev.to)
Reagiere als Erste:r — dein Feedback zählt!

Yesterday I published a postmortem about my own guardrail blocking me from writing a Markdown file. The two-axis fix I proposed there — classify the argument, but also ask whether the tool can act on it — was the right shape and the wrong root cause.



The actual root cause was two matcher defects. Both are worth stealing.






Defect 1: bare-word alternation



The commerce-path matcher listed its tokens as a bare alternation. Any payload that merely contained one of those words anywhere — in prose, in a comment, inside a longer identifier — matched, regardless of context.



Confirmed live: a Python docstring in an unrelated repository was rejected as an attempted transaction.



That is worse than it sounds, because the hook is registered with a match-everything pattern in user settings. It was not misfiring on one project. It was misfiring on every project on the machine.



The fix: require a real path or fragment separator, plus a trailing word boundary, so a token that continues into a longer identifier is not treated as a path.






Defect 2: a conjunction that satisfies itself



This one is my favourite, because I stared straight at it and did not see it.



The rule was a conjunction — deny when the payload contains both a mutation action and a financial object:




if (MUTATION_ACTION.test(text) && FINANCIAL_OBJECT.test(text)) deny()






That reads as sensible narrowing. Two independent signals, both required.



Except several tokens appear in both lists. So one word satisfies both halves by itself:




token: "checkout"

is it a mutation action? yes - it is in the action list
is it a financial object? yes - it is in the object list

-> both clauses true, from one word, in any context
-> DENY

me: it was a docstring






The conjunction was not narrowing anything. For every overlapping token it was a single-word denylist wearing an AND's clothes — and because it looked like a conjunction, it read as conservative in review. That is the dangerous kind of bug: not one that hides, one that reassures.



The fix: the action and the object must occupy distinct, non-overlapping spans in the payload. Two signals means two places in the text, not one word counted twice.






The part worth arguing about



The reason to fix this in a day is not developer annoyance. It is that a fail-closed control with a high false-positive rate does not stay enabled.



That is the whole failure mode. Nobody sits down and edits a ruleset to be subtly worse. They add a bypass, or set the override env var, or comment out the hook "just for this branch" — and then coverage is zero, and the incident that eventually happens looks identical to a control that was never installed. The guard does not fail loudly. It fails by uninstallation, months earlier, in a commit nobody reviewed carefully.



So precision is not cosmetic for a security control. Precision is what buys you the right to keep the control switched on. Every false positive is a withdrawal from the account you need at the moment it fires correctly.






How to prove a precision fix did not cost coverage



When you loosen a matcher, the obvious question is whether you also loosened something you needed. Asserting "no regressions" is not an answer to that question. So the change shipped with a decision diff over a real payload corpus: replay every payload through the old and the new matcher, and count which direction each decision moved.




























Corpus A Corpus B
payloads 234,768 414,735
decisions loosened (deny to allow) 3,229 4,499
decisions tightened (allow to deny) 0 0


tightened: 0 is the claim that matters. Coverage did not move in the dangerous direction across 649,503 payloads.



And the write-up labels these as raw counts — explicitly not "zero regressions" — because a corpus is only what it happens to contain, and a count over it is not a proof about payloads it never held. That distinction is the difference between a measurement and a marketing line, and it is the first thing I would look for in anyone else's "we improved our guardrails" post.






Two questions for your own guard



If you maintain any pattern-based control — a WAF rule, a secret scanner, a lint gate, an agent guardrail:





  1. Does any single token satisfy more than one clause of your conjunctions? Grep your lists against each other. Overlap silently turns an AND into an OR, and the code still reads as strict.


  2. Can you produce a loosened/tightened table for your last tuning change? If not, you do not know what that change did. You know what you intended it to do.



ThumbGate is MIT and local-first. It runs in the PreToolUse hook and needs no server on the local enforcement path:




npx thumbgate init






Repo: github.com/IgorGanapolsky/ThumbGate



The census harness is in there too, if the shape of the diff rig is more useful to you than the tool itself.

CTI Threat Relationship Graph2 Knoten / 1 Relationen
CVE / Incident Software MITRE ATT&CK CWE Weakness IoC
SOC Incident Playbook: Remote Code Execution (RCE) Defense
Syntax validiert (0 Fehler)
title: Detect Exploitation - My agent guardrail denied a Python docstring as an attempted transaction
id: 025265ba-5b2e-46e7-bfa7-471f2d7b8736
status: experimental
description: Automatisch generierte SIEM-Erkennungsregel basierend auf CTI Intelligence
references:
  - https://tsecurity.de/
author: iShareStuff CTI Automated Detection Engine
date: 2026-09-25
logsource:
  category: network_connection
  product: any
detection:
  selection:
      CommandLine|contains:
        - 'exploit'
  condition: selection
falsepositives:
  - Legitime administrative Zugriffe oder Penetrationstests
level: high
tags:
  - attack.initial_access
Syntax validiert (0 Fehler)
rule CTI_Threat_Indicator {
    meta:
        author = "iShareStuff CTI Automated Detection Engine"
        date = "2026-09-25"
        description = "YARA Signature for "
    strings:
        $str = "My agent guardrail denied a Py" ascii wide
    condition:
        any of them
}
Syntax validiert (0 Fehler)
index=security sourcetype IN ("cisco:asa", "pan:traffic", "zeek_conn", "suricata", "WinEventLog:Security")
("My agent guardrail denied a Python docst")
| stats count earliest(_time) as first_seen latest(_time) as last_seen by src_ip, dest_ip, dest_host, signature
| eval first_seen=strftime(first_seen, "%Y-%m-%d %H:%M:%S"), last_seen=strftime(last_seen, "%Y-%m-%d %H:%M:%S")
| sort - count
Syntax validiert (0 Fehler)
message: "*My agent guardrail denied a Python docst*"
Syntax validiert (0 Fehler)
CommonSecurityLog
| where Message has "My agent guardrail denied a Python docst"
| summarize EventCount = count(), FirstSeen = min(TimeGenerated), LastSeen = max(TimeGenerated) by SourceIP, DestinationIP, DestinationPort, Activity
| extend DetectionRule = "iShareStuff-CTI-Compiled"
| sort by EventCount desc
🎯
MITRE ATT&CK Matrix Navigator 14 Taktiken
Reconnaissance
-
Resource Development
-
Initial Access
Execution
Persistence
-
Privilege Escalation
Defense Evasion
Credential Access
-
Discovery
-
Lateral Movement
-
Collection
-
Command and Control
Exfiltration
-
Impact
tsecurity.de Cognitive Threat RAG
Fokus-Vektor:

Kognitive Analyse für identifizierte Bedrohung: Erhöhte Bedrohungslage im Bereich My agent guardrail denied a Python docst.... Basierend auf 368k Vektor-Korrelationen werden sofortige Isolationsmaßnahmen für betroffene Endpunkte empfohlen.

🛡️ Angriffsfläche & Exposure

Netzwerk/Remote-Zugriff ohne Vorauthentifizierung möglich.

⚡ Empfohlene Sofortmaßnahmen
  • 1. Perimeter-Inspektion: Relevante Portfreigaben und exponierte Endpunkte unverzüglich scannen.
  • 2. Patch-Applikation: Hersteller-Hotfix einspielen oder betroffene Daemons in isolierte DMZ-Segmente überführen.
  • 3. Telemetrie & EDR-Alerts: Prozessaufrufe und Child-Processes auf anomale Shell-Spawns überwachen.
🔗 Semantisch verwandte Zero-Days MariaDB 11.7 VEC
Zum Aktualisieren ziehen
ZERO-DAY Kritische Sicherheitsmeldung
Advisory →
tsecurity.de Icon
Offline-Lesen, Eilmeldungen & 0ms Ladezeit

Installiere tsecurity.de direkt auf deinen Home-Bildschirm für das ultimative Vollbild-Magazinerlebnis ohne Browser-Leisten.

Nächster Beitrag
Themen-Radar & Intelligence Matrix
Echtzeit-Taxonomie nach Angriffsvektoren & Plattformen

tsecurity.de Live Threat Radar

🔴 LIVE RADAR
MONITORING
AKTIV
CVE-DATENBANK
LIVE
🔍
Community Radar & Live Chat
Sentinel Bot online • Live-Stream
Dein Cluster: Security Explorer
Match:
lädt…
Verbindung zum Community-Stream wird aufgebaut...
Bearbeitungsmodus — Senden überschreibt deine Nachricht
Community-Puls — was gerade passiert
lädt…
Aktivitäten deiner Analysten
lädt…
Neues Thema oder Eilmeldung einreichen

Reiche interessante Links, Zero-Days oder Debatten ein. Die Community entscheidet per Upvote über die Veröffentlichung.

Heiß diskutierte Einreichungen
📂 Keine gespeicherten Artikel vorhanden.
Zurück Ziehen Vor
Links: vorheriger Artikel • Rechts: nächster Artikel • unten: schließen
News NIS-2 Frühwarnung Tier-1 Intel TTP ⏱️ 3 Min vor 10 Min
Artikeldaten werden geladen...
↗ Original-Quelle