Skip to content

Commit 5d3aceb

Browse files
committed
docs(blog): use "opaque methods" not "boundaries" in appsec post
The saturation-loop prose called external/opaque methods "boundaries," which collided with the standard "trust boundaries" used earlier in the post. Switch to the "opaque methods" / "unmodeled methods" vocabulary the same paragraphs already use.
1 parent 0fe2bf0 commit 5d3aceb

1 file changed

Lines changed: 4 additions & 4 deletions

File tree

src/content/blog/appsec-agent.mdx

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ A security review is really a chain of judgments about trust. Where's the attack
8282
next(["Stage 2 — Triage"])
8383

8484
surface --> rules --> scan
85-
scan -->|"new boundaries"| approx
85+
scan -->|"new opaque methods"| approx
8686
approx -->|"re-scan"| scan
8787
scan -.->|"saturated"| next
8888

@@ -92,18 +92,18 @@ A security review is really a chain of judgments about trust. Where's the attack
9292
style scan fill:#dbeafe,stroke:#3b82f6,color:#1e40af
9393
style next fill:none,stroke:#78716c,stroke-dasharray:4 4,color:#78716c`} />
9494

95-
*Stage 1 — **Scan**. The agent does the discovering and turns what it finds into artifacts. The engine applies them, deterministically. The cycle is approximation **saturation** — re-scan until no new boundaries turn up.*
95+
*Stage 1 — **Scan**. The agent does the discovering and turns what it finds into artifacts. The engine applies them, deterministically. The cycle is approximation **saturation** — re-scan until no new opaque methods turn up.*
9696

9797
- **Maps the attack surface** — the places untrusted data enters, and the operations where it can do real damage.
9898
- **Authors rules, test-first** — the patterns your code is missing, each accepted only once it's tested.
9999
- **Scans** — the engine traces every flow and hands back each finding as the full trace behind it.
100-
- **Saturates approximations** — models the opaque methods, over and over, until no new boundary shows up.
100+
- **Saturates approximations** — models the opaque methods, over and over, until no new ones show up.
101101

102102
Mapping is what makes coverage defensible. The agent works through every dependency the project pulls in and sorts them: which ones handle outside data, which expose dangerous operations, and which are just inert. The packages it flags get drilled into, down to the exact methods the project calls. The ones it dismisses get logged with a reason. What's left is a coverage record showing what got examined, what got set aside, and why. You also set the scope up front — the whole application, one component you're worried about, or a single bug you already suspect.
103103

104104
Rules get written the way code does, tests first. Where a built-in rule already fits, the agent just wires it in. It only writes a new pattern when nothing existing covers the case. Each new rule comes with two examples — a vulnerable snippet it *should* flag and a safe one it *shouldn't* — and it isn't accepted until it gets both right. A rule that misfires manufactures noise at scale, across the whole codebase at once. Writing the tests first heads that off.
105105

106-
The deep findings only surface after saturation. The agent models the methods where traces were dying, then re-scans — and that scan usually turns up a fresh layer of unmodeled boundaries the new approximations just exposed. So it models those too and scans again. This keeps going until a scan finds nothing new. Only at that point does the engine start seeing flows that thread through many layers of library and framework code at once. In one real case, this workflow found and confirmed an unauthenticated remote-code-execution bug in a widely used open-source server. The path ran from an HTTP request, through several layers of framework plumbing, into a scripting evaluator — and most of those layers were the unmodeled methods where the trace had been quietly dying. Only once the approximations were saturated did it connect the request all the way to the evaluator.
106+
The deep findings only surface after saturation. The agent models the methods where traces were dying, then re-scans — and that scan usually turns up a fresh layer of unmodeled methods the new approximations just exposed. So it models those too and scans again. This keeps going until a scan finds nothing new. Only at that point does the engine start seeing flows that thread through many layers of library and framework code at once. In one real case, this workflow found and confirmed an unauthenticated remote-code-execution bug in a widely used open-source server. The path ran from an HTTP request, through several layers of framework plumbing, into a scripting evaluator — and most of those layers were the unmodeled methods where the trace had been quietly dying. Only once the approximations were saturated did it connect the request all the way to the evaluator.
107107

108108
You choose how much of this workflow to actually run, and each level includes everything in the one below it:
109109

0 commit comments

Comments
 (0)