mitigations: add SAF-M-44 Tool Definition Integrity Monitoring - #234
Open
Santoshkumarpuppala wants to merge 1 commit into
Open
Santoshkumarpuppala wants to merge 1 commit into
Santoshkumarpuppala wants to merge 1 commit into
Conversation
Santoshkumarpuppala
force-pushed
the
add-saf-m-44
branch
from
September 8, 2026 03:16
f351be2 to
188669d
Compare
SAF-M-44 was referenced but never written. techniques/SAF-T1201 named it as "Tool Integrity Monitoring" and listed it among that technique's mitigations until the 2026-09-02 reauthor; mitigations/SAF-M-45 still links it today, at README.md:233, as part of the chain it defers content safety to. Both links 404. Reported in secure-agentic-framework#221; @fkautz invited a submission there. The gap it fills is specific and not covered elsewhere. SAF-M-45 establishes that a tool descriptor originates from a trusted server. It does not establish that the descriptor being served is the one a human approved: a server holding its own signing key can sign a changed descriptor and the signature verifies. SAF-T1201 (Post-Approval Tool Mutation) names "content pinning and reapproval" as a preventive control with no mitigation document behind it. This is that document. Written to TEMPLATE.md, matching SAF-M-52/53/54; all 16 checklist sections are present. Both code examples were executed and assert what the surrounding text claims — including the negative one, where an allowlist digest fails to detect a flipped destructiveHint. Every cross-reference was fetched and resolves. Signed-off-by: Santosh Kumar Puppala <puppalas97@gmail.com>
Santoshkumarpuppala
force-pushed
the
add-saf-m-44
branch
from
September 8, 2026 08:22
188669d to
45c3e08
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes the SAF-M-44 gap reported in #221. @fkautz — you said you were willing to take submissions on this, so here it is.
What this is
SAF-M-44is referenced but has never existed.techniques/SAF-T1201/README.mdlisted it as "Tool Integrity Monitoring" among that technique's mitigations until the 2026-09-02 reauthor, andmitigations/SAF-M-45/README.md:233still links it today as part of the chain it defers content safety to. Both 404.This adds the document. The gap it fills is narrow and, as far as I can tell, uncovered:
SAF-M-45 establishes origin. It does not establish stability. A server in possession of its own signing key can sign a changed descriptor perfectly well, and the signature verifies. So a validly-signed replacement of a tool a human approved on the strength of its earlier description passes SAF-M-45 and is exactly the case SAF-T1201 describes.
SAF-T1201already names "content pinning and reapproval" as a preventive control (README.md:178) with no mitigation document behind it — this is that document.I checked before writing: no existing mitigation covers descriptor drift as its subject. SAF-M-45 mentions pinning twice but is about signing; SAF-M-51 is embedding anomalies; SAF-M-53 is behavioural monitoring of what a tool does, where this is about what a tool declares.
On the name
The one surviving reference (
SAF-M-45:233) calls SAF-M-44 "Behavioral Monitoring". I've written it as Tool Definition Integrity Monitoring instead, for two reasons: that was its name inSAF-T1201before the reauthor, and "Behavioral Monitoring" would substantially overlap the existing SAF-M-53. Happy to rename if you'd rather keep the SAF-M-45 wording and have this be something else — say the word and I'll redo it.Three things I noticed in SAF-M-45's chain while cross-checking
Not fixed here, since they're outside this PR's scope, but worth flagging — the "Combine with Existing Controls" block at
SAF-M-45/README.md:230-235is broken on all four entries:SAF-M-37SAF-M-38SAF-M-43SAF-M-44The block closes with "This layered approach ensures both authenticity (who published it) and content safety (what it contains)", and none of the four links currently supports the second half. Happy to open a separate PR for the two mislabels and
SAF-M-43if that's useful.Verification
mitigations/TEMPLATE.md, matching the format used by SAF-M-52/53/54. All 16 sections inTEMPLATE-CHECKLIST.mdare present.destructiveHintwhile an exclusion-style digest differs. That assertion is the finding, not decoration.Toolcarriesname,title,description,inputSchema,outputSchema,annotations,_meta.Disclosure
I maintain norviq, an Apache-2.0 policy enforcement point that implements tool-definition pinning, so I have a view on what this control should say and a bias worth knowing about. The document is written to the framework's threat model rather than to that implementation — the limitations section says plainly where pinning does not help, including trust-on-first-use and the fact that definition-only detection cannot see an unchanged descriptor over altered backend code.