@clear-capabilities/agentic-security-scanner 0.139.1 → 0.141.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +221 -0
- package/bin/agentic-security.js +40 -11
- package/dist/113.index.js +79 -3
- package/dist/178.index.js +1 -1
- package/dist/238.index.js +77 -1
- package/dist/384.index.js +1 -1
- package/dist/435.index.js +12 -0
- package/dist/526.index.js +79 -3
- package/dist/637.index.js +1 -1
- package/dist/agentic-security.mjs +14 -14
- package/dist/agentic-security.mjs.sha256 +1 -1
- package/dist/compliance-frameworks/ccpa.json +34 -7
- package/dist/compliance-frameworks/eu-ai-act.json +65 -14
- package/dist/compliance-frameworks/gdpr.json +56 -12
- package/dist/compliance-frameworks/hipaa-security-rule.json +68 -15
- package/dist/compliance-frameworks/nist-ai-600-1.json +57 -12
- package/dist/compliance-frameworks/nist-csf-2.json +78 -16
- package/dist/compliance-frameworks/nist-privacy-1-1.json +3 -0
- package/dist/compliance-frameworks/owasp-asvs-5.json +91 -20
- package/dist/compliance-frameworks/owasp-llm-top-10.json +89 -20
- package/package.json +16 -5
- package/src/dataflow/catalog.js +61 -0
- package/src/engine.js +281 -23
- package/src/mcp/tools.js +12 -0
- package/src/posture/accuracy-scorecard.js +57 -0
- package/src/posture/aibom.js +110 -1
- package/src/posture/auditor-walkthrough.js +137 -21
- package/src/posture/compliance-frameworks/ccpa.json +34 -7
- package/src/posture/compliance-frameworks/eu-ai-act.json +65 -14
- package/src/posture/compliance-frameworks/gdpr.json +56 -12
- package/src/posture/compliance-frameworks/hipaa-security-rule.json +68 -15
- package/src/posture/compliance-frameworks/nist-ai-600-1.json +57 -12
- package/src/posture/compliance-frameworks/nist-csf-2.json +78 -16
- package/src/posture/compliance-frameworks/nist-privacy-1-1.json +3 -0
- package/src/posture/compliance-frameworks/owasp-asvs-5.json +91 -20
- package/src/posture/compliance-frameworks/owasp-llm-top-10.json +89 -20
- package/src/posture/concurrency-checker.js +42 -5
- package/src/posture/coverage-strength.js +182 -0
- package/src/posture/epss.js +17 -1
- package/src/posture/family-registry.js +103 -0
- package/src/posture/family-resolve.js +47 -0
- package/src/posture/fix-coverage.js +113 -0
- package/src/posture/fix-metrics.js +76 -0
- package/src/posture/integrity.js +59 -8
- package/src/posture/mcp-rug-pull.js +144 -0
- package/src/posture/poc-generator.js +17 -1
- package/src/posture/poc-inprocess.js +217 -1
- package/src/posture/proof-coverage.js +162 -0
- package/src/posture/reachability-filter.js +44 -0
- package/src/posture/sbom.js +50 -7
- package/src/runScan.js +56 -5
- package/src/sast/CLAUDE.md +2 -2
- package/src/sast/claude-md-prompt-injection.js +47 -3
- package/src/sast/cloud-iam.js +23 -0
- package/src/sast/convention-deviation.js +66 -3
- package/src/sast/crypto-protocol.js +23 -0
- package/src/sast/dapp-frontend.js +20 -0
- package/src/sast/iac-cloud-templates.js +337 -0
- package/src/sast/k8s-admission.js +27 -0
- package/src/sast/ml-supply-chain.js +22 -0
- package/src/sast/ruby.js +132 -0
- package/src/sast/web3-advanced.js +26 -0
- package/src/sca/CLAUDE.md +21 -4
- package/src/sca/container.js +18 -1
- package/src/sca/dep-confusion.js +69 -3
package/dist/526.index.js
CHANGED
|
@@ -10,7 +10,7 @@ export const modules = {
|
|
|
10
10
|
/* harmony export */ fixDurationReport: () => (/* binding */ fixDurationReport),
|
|
11
11
|
/* harmony export */ renderFixDurationSummary: () => (/* binding */ renderFixDurationSummary)
|
|
12
12
|
/* harmony export */ });
|
|
13
|
-
/* unused harmony exports FIX_STAGES, loadFixAttempts, bucketOf, summarizeFixDurations, _internals */
|
|
13
|
+
/* unused harmony exports FIX_STAGES, loadFixAttempts, bucketOf, summarizeFixDurations, _internals, summarizeFixAxes, renderFixAxes */
|
|
14
14
|
/* harmony import */ var node_fs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(3024);
|
|
15
15
|
/* harmony import */ var node_path__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(6760);
|
|
16
16
|
/* harmony import */ var _state_dir_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(1174);
|
|
@@ -213,6 +213,82 @@ function renderFixDurationSummary(sum) {
|
|
|
213
213
|
const _internals = { _dist, _pct, RELIABLE_N };
|
|
214
214
|
|
|
215
215
|
|
|
216
|
+
// ── PRD F6.1 — score fixes on THREE AXES, not one ──────────────────────────
|
|
217
|
+
//
|
|
218
|
+
// The three axes the PRD names:
|
|
219
|
+
// (a) does the finding disappear — the rescan leg
|
|
220
|
+
// (b) does the project's own suite pass — the tests leg
|
|
221
|
+
// (c) does an independent verifier agree — the PoC re-check leg
|
|
222
|
+
//
|
|
223
|
+
// All three were already computed by verifyFixCore and then collapsed into one
|
|
224
|
+
// boolean, which is the problem: **(a) alone is satisfiable by deleting code.**
|
|
225
|
+
// A patch that removes the vulnerable function passes the rescan, has nothing
|
|
226
|
+
// left to fail, and — on a project with no detectable test suite — reaches
|
|
227
|
+
// ok:true having proven only that the detector went quiet.
|
|
228
|
+
//
|
|
229
|
+
// Reporting the axes separately makes that visible. `aOnly` is the number that
|
|
230
|
+
// matters most and the one nobody was publishing: attempts that satisfied ONLY
|
|
231
|
+
// the disappearance axis. A high aOnly with a high headline is the shape of a
|
|
232
|
+
// remediation feature that is deleting code and calling it a fix.
|
|
233
|
+
function summarizeFixAxes(attempts) {
|
|
234
|
+
const list = Array.isArray(attempts) ? attempts.filter(Boolean) : [];
|
|
235
|
+
const d = list.length;
|
|
236
|
+
|
|
237
|
+
const rate = (pred) => ({ n: list.filter(pred).length, d });
|
|
238
|
+
|
|
239
|
+
// Each axis is judged INDEPENDENTLY of the overall verdict, so a leg that
|
|
240
|
+
// passed inside a failed attempt still counts for its own axis. Reading them
|
|
241
|
+
// off `ok` would make the three axes three copies of the same number.
|
|
242
|
+
const findingDisappeared = rate((a) => a.rescanOk === true || (a.ok === true && a.rescanOk !== false));
|
|
243
|
+
const testsStillPass = rate((a) => a.testsRan === true && a.testsOk !== false);
|
|
244
|
+
const verifierAgrees = rate((a) => a.pocOk === true);
|
|
245
|
+
|
|
246
|
+
const satisfiesAll = rate((a) =>
|
|
247
|
+
(a.rescanOk === true || (a.ok === true && a.rescanOk !== false))
|
|
248
|
+
&& a.testsRan === true && a.testsOk !== false
|
|
249
|
+
&& a.pocOk === true);
|
|
250
|
+
|
|
251
|
+
// The honesty number: disappearance WITHOUT either corroborating axis.
|
|
252
|
+
const aOnly = rate((a) => {
|
|
253
|
+
const disappeared = a.rescanOk === true || (a.ok === true && a.rescanOk !== false);
|
|
254
|
+
const corroborated = (a.testsRan === true && a.testsOk !== false) || a.pocOk === true;
|
|
255
|
+
return disappeared && !corroborated;
|
|
256
|
+
});
|
|
257
|
+
|
|
258
|
+
return {
|
|
259
|
+
total: d,
|
|
260
|
+
findingDisappeared,
|
|
261
|
+
testsStillPass,
|
|
262
|
+
verifierAgrees,
|
|
263
|
+
satisfiesAll,
|
|
264
|
+
aOnly,
|
|
265
|
+
meaning:
|
|
266
|
+
'findingDisappeared = the detector went quiet; testsStillPass = the project suite ran AND passed; '
|
|
267
|
+
+ 'verifierAgrees = an independent PoC re-check confirmed the hole is shut. '
|
|
268
|
+
+ 'aOnly counts attempts that satisfied ONLY disappearance — the shape a code-deleting "fix" produces.',
|
|
269
|
+
caveat: d === 0
|
|
270
|
+
? 'no attempts recorded; every rate is 0/0 and means nothing'
|
|
271
|
+
: 'rates carry {n,d}; a small d is indicative, not settled',
|
|
272
|
+
};
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
/** Markdown for a report. Denominators always attached. */
|
|
276
|
+
function renderFixAxes(sum) {
|
|
277
|
+
if (!sum || !sum.total) return '_No fix attempts recorded._\n';
|
|
278
|
+
const row = (label, r, note) => `| ${label} | ${r.n}/${r.d} | ${note} |`;
|
|
279
|
+
return [
|
|
280
|
+
'| Axis | Rate | Meaning |',
|
|
281
|
+
'|---|---|---|',
|
|
282
|
+
row('(a) finding disappeared', sum.findingDisappeared, 'the detector went quiet'),
|
|
283
|
+
row('(b) project tests pass', sum.testsStillPass, 'the suite RAN and passed'),
|
|
284
|
+
row('(c) verifier agrees', sum.verifierAgrees, 'an independent PoC re-check confirmed it'),
|
|
285
|
+
row('all three', sum.satisfiesAll, 'the only row that means "fixed"'),
|
|
286
|
+
row('(a) ALONE', sum.aOnly, 'satisfiable by deleting code — watch this number'),
|
|
287
|
+
'',
|
|
288
|
+
].join('\n');
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
|
|
216
292
|
/***/ }),
|
|
217
293
|
|
|
218
294
|
/***/ 3526:
|
|
@@ -234,8 +310,8 @@ var external_node_child_process_ = __webpack_require__(1421);
|
|
|
234
310
|
var external_node_fs_ = __webpack_require__(3024);
|
|
235
311
|
// EXTERNAL MODULE: external "node:path"
|
|
236
312
|
var external_node_path_ = __webpack_require__(6760);
|
|
237
|
-
// EXTERNAL MODULE: ./src/engine.js +
|
|
238
|
-
var engine = __webpack_require__(
|
|
313
|
+
// EXTERNAL MODULE: ./src/engine.js + 200 modules
|
|
314
|
+
var engine = __webpack_require__(3474);
|
|
239
315
|
;// CONCATENATED MODULE: ./src/posture/fix-honesty-gate.js
|
|
240
316
|
// Deterministic honesty gates on fix / finding output (#7).
|
|
241
317
|
//
|
package/dist/637.index.js
CHANGED
|
@@ -11,7 +11,7 @@ export const modules = {
|
|
|
11
11
|
/* harmony export */ renderPrDeltaText: () => (/* binding */ renderPrDeltaText)
|
|
12
12
|
/* harmony export */ });
|
|
13
13
|
/* harmony import */ var node_child_process__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(1421);
|
|
14
|
-
/* harmony import */ var _engine_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
|
|
14
|
+
/* harmony import */ var _engine_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(3474);
|
|
15
15
|
// Shadowscan / security-DELTA on PR (v0.72).
|
|
16
16
|
//
|
|
17
17
|
// Most SAST PR-comment integrations show absolute counts — "12 findings
|