Trail of Bits’ taint-trace skill adds the source and sink models your taint analyzer is missing
2 days ago
Trail of Bits' Trailmark plugin 0.13.0 adds taint-trace, a skill that writes the missing source, sink and sanitizer models into your code so an existing taint analyzer such as Psalm, Pysa, Joern, Semgrep or CodeQL can follow input it used to lose. Merged November 12, 2026, for Claude Code and Codex. https://github.com/trailofbits/skills/pull/502 https://github.com/trailofbits/skills/blob/main/plugins/trailmark/skills/taint-trace/SKILL.md https://github.com/trailofbits/skills/blob/main/plugins/trailmark/README.md
Ask about this presentation
Chapters
0:00Trail of Bits’ taint-trace skill adds the source and sink models your taint analyzer is missing
0:17Taint analyzers miss flows through code they have no model for
0:34Trailmark’s graph picks where to annotate, and the analyzer finds the flow
0:46On URLify, two docblock lines closed the gap
1:04Psalm now flags the wrapped shell calls and leaves the safe ones clean
1:18A sanitizer model removes only the threat it actually prevents
1:33Every model is checked against a run from before it was added
1:48Psalm leads for PHP, and Joern or Semgrep covers most other languages
2:04taint-trace ships in Trailmark plugin 0.13.0 for Claude Code and Codex
Show transcriptHide transcript
Trail of Bits' Trailmark plugin gained a taint-trace skill on November 12th. It writes the source and sink annotations your taint analyzer, like Psalm, is missing, then reruns it. The analyzer can then follow user input through your own wrapper functions.
Psalm, CodeQL and Semgrep follow untrusted input to dangerous calls. When your own sources, sinks, sanitizers and wrappers have no models, the input drops out at that boundary. Marking them is what makes Psalm's taint analysis work.
Trailmark maps callers, callees and unresolved calls around each dangerous sink. That graph only shows what can call what. So every taint claim needs a finding from the analyzer's own run.
Psalm lost track of user input passed through transliterate, a function in the PHP library URLify. The skill added one annotation saying input flows to the return value, and one keeping each call site separate.
Psalm then caught two shell calls it had missed, including one escaped for HTML instead of the shell. The literal string and the shell-escaped call stayed clean, and every earlier warning was still there.
Naming a function sanitize doesn't make it a sanitizer, and neither does a boolean check. If the analyzer can't tell an HTML context from a shell context, the skill leaves the sanitizer out and says so.
First the skill proves the analyzer flags a known vulnerable case, ignores a literal string, and records a baseline. Then it runs again with the new models. Without that comparison, the benefit is reported as unmeasured.
Each language gets an order of analyzers to try: Psalm for PHP, Pysa for Python, Clang for C. Rust and Dart get only Semgrep's single-function analysis. Psalm 5, 6 and 7 pass the skill's CI tests.
It's in Trailmark plugin 0.13.0 for Claude Code and Codex, with the Trailmark Python package, version 0.8. Analyzers are separate installs. I'd start with Psalm on a PHP project, the most tested route. Setup is in the plugin's readme.
Up next
2:54Anthropic’s Excel skill stops LibreOffice from rewriting your workbook
@skill-repos
4 hours ago
2:01Agent Skills’ frontend skill stops installing test runners just to check its work
@skill-repos
15 hours ago
1:30Anthropic’s Word, PDF, PowerPoint and Excel skills are now Apache 2.0
@skill-repos
1 week ago
2:32Trail of Bits' cvss-scoring skill turns a bug description into a CVSS v4.0 vector
@skill-repos
1 week ago
3:02Superpowers 7.0.2 fixes skill loading on Pi, OpenCode and Copilot for Windows
@skill-repos
1 week ago
2:12Superpowers’ brainstorming skill now asks why first and stops asking filler questions
@skill-repos
1 week ago
1:37Agent Skills' code review skill now drops findings your code already rules out
@skill-repos
1 week ago
2:10Superpowers 7.0.1 keeps its five-round fix limit after Claude Code compacts
@skill-repos
3 weeks ago
2:11Trail of Bits' regression-hunt skill only reports a bug a fresh agent can reproduce
@skill-repos
3 weeks ago
2:30Superpowers’ brainstorming skill now reads your project before it asks you anything
@skill-repos
3 weeks ago
2:07Trail of Bits' gh-cli plugin stops long Claude Code sessions from breaking every Bash call
@skill-repos
1 month ago
2:13Trail of Bits fixes mermaid-to-proverif, which read ProVerif's results backwards
@skill-repos
1 month ago