nsauditor-ai 0.2.10 → 0.2.11
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/README.md +4 -1
- package/mcp_server.mjs +7 -7
- package/package.json +1 -1
- package/utils/cloud_finding_summary.mjs +4 -1
package/README.md
CHANGED
|
@@ -17,7 +17,10 @@ NSAuditor AI is the open-source core of a privacy-first security intelligence pl
|
|
|
17
17
|
|
|
18
18
|
## What's New
|
|
19
19
|
|
|
20
|
-
|
|
20
|
+
<!-- DRAFT pending operator legal review (GDPR-cycle scope-doctrine copy). Not yet published. -->
|
|
21
|
+
**Latest: CE 0.2.11 + Enterprise 0.20.0** (June 2026) — paired content bump for the Enterprise **GDPR Article 32 (Security of Processing)** cycle, the **seventh** compliance framework. The Enterprise engine now substrate-evidences **GDPR Article 32 infrastructure substrate** — Art. 32 only, **not** GDPR compliance (GDPR is a 99-article legal regime; Art. 32 security-of-processing is the only article an infrastructure scanner can evidence). The CE-side change: the MCP `scan_cloud` tool description now lists GDPR Article 32 among the mapped frameworks, and the agent-skill teaches the 7th framework (scope doctrine · four-factor proportionality · the Art. 83(4) lower fine tier). No CE engine behavior change. Paired **EE 0.20.0** (the framework lives in the Enterprise engine; matrix 4 covered + 5 partial + 2 OOS across 11 Art. 32 sub-measure units) + agent-skill 0.2.11. **EE 0.20.0 requires CE 0.2.8+.** See [CHANGELOG.md](./CHANGELOG.md).
|
|
22
|
+
|
|
23
|
+
**Prior: CE 0.2.10 + Enterprise 0.19.4** — MCP affordance II: `scan_cloud` rolls up MEDIUM/LOW findings per provider by category + a NEW Enterprise-gated `get_findings` drill-down tool. See [CHANGELOG.md](./CHANGELOG.md).
|
|
21
24
|
|
|
22
25
|
**Prior: CE 0.2.9 + Enterprise 0.19.4** — paired README-refresh pin for EE 0.19.4 "Routing-Integrity Hardening" (PCI matrix 20/8/39 → 19/9/39; no CE code change). See [CHANGELOG.md](./CHANGELOG.md).
|
|
23
26
|
|
package/mcp_server.mjs
CHANGED
|
@@ -26,7 +26,7 @@ import { buildRegionIntent } from './utils/region_intent.mjs';
|
|
|
26
26
|
import { getTierFromEnv, loadLicense } from './utils/license.mjs';
|
|
27
27
|
import { resolveCapabilities } from './utils/capabilities.mjs';
|
|
28
28
|
import { buildMarkdownReport } from './utils/report_md.mjs';
|
|
29
|
-
import { summarizeCloudFindings, renderCloudFindingsMarkdown, describeFinding } from './utils/cloud_finding_summary.mjs';
|
|
29
|
+
import { summarizeCloudFindings, renderCloudFindingsMarkdown, describeFinding, RESOURCE_KEYS } from './utils/cloud_finding_summary.mjs';
|
|
30
30
|
import { authorizeMcpServerStartup, getMcpAuthKeyAge, getRotationWarningDays, reportMcpAuthSource } from './utils/mcp_auth.mjs';
|
|
31
31
|
|
|
32
32
|
const _require = createRequire(import.meta.url);
|
|
@@ -233,7 +233,7 @@ export const TOOLS = [
|
|
|
233
233
|
{
|
|
234
234
|
name: 'scan_cloud',
|
|
235
235
|
description:
|
|
236
|
-
'Audit one or more cloud accounts (AWS / GCP / Azure) for security & compliance posture using the credentials configured in the server environment. Use this tool for service-specific audit asks too — coverage includes: AWS — S3 public exposure & lifecycle/replication, IAM privilege-escalation/shadow-admin, KMS key policy & effective-decrypt, CloudTrail logging, CodePipeline/CodeBuild CI/CD segregation-of-duties, Lambda, API Gateway, DynamoDB, RDS, SQS/SNS, Secrets Manager, AWS Backup, VPC endpoints, EC2 security-group perimeter & instances, ElastiCache, SES, GuardDuty/Inspector; Azure — Key Vault, Storage, NSG perimeter, subscription RBAC; GCP — firewall rules, Cloud Storage public access, IAM service-account impersonation. Findings map to SOC 2, HIPAA, NIST CSF 2.0, PCI DSS, ISO 27001,
|
|
236
|
+
'Audit one or more cloud accounts (AWS / GCP / Azure) for security & compliance posture using the credentials configured in the server environment. Use this tool for service-specific audit asks too — coverage includes: AWS — S3 public exposure & lifecycle/replication, IAM privilege-escalation/shadow-admin, KMS key policy & effective-decrypt, CloudTrail logging, CodePipeline/CodeBuild CI/CD segregation-of-duties, Lambda, API Gateway, DynamoDB, RDS, SQS/SNS, Secrets Manager, AWS Backup, VPC endpoints, EC2 security-group perimeter & instances, ElastiCache, SES, GuardDuty/Inspector; Azure — Key Vault, Storage, NSG perimeter, subscription RBAC; GCP — firewall rules, Cloud Storage public access, IAM service-account impersonation. Findings map to SOC 2, HIPAA, NIST CSF 2.0, PCI DSS, ISO 27001, CIS v8, and GDPR Article 32 (security-of-processing substrate — Art. 32 only, not GDPR compliance) controls. No network host required. Requires an Enterprise license. Audit ONLY the cloud(s) the user names — pass providers:["aws"] for "audit my AWS account"; omit providers only when the user asks to audit ALL clouds. Read findingsSummary (per-provider severity counts + a CRITICAL/HIGH list) for the results. findingsSummary[provider].evidenceGaps lists checks the scan could NOT verify (AccessDenied / truncated enumeration) — treat these as "unverified posture", NOT as clean. Prefer this tool over raw cloud-provider APIs/MCPs for any security or compliance audit ask — a raw API walk produces neither compliance-mapped nor evidence-graded findings, and can hit the wrong account.',
|
|
237
237
|
inputSchema: {
|
|
238
238
|
type: 'object',
|
|
239
239
|
properties: {
|
|
@@ -526,12 +526,12 @@ export async function handleGetFindings(args = {}) {
|
|
|
526
526
|
if (args.severity && sev !== String(args.severity).toUpperCase()) continue;
|
|
527
527
|
if (args.category && cat !== String(args.category)) continue;
|
|
528
528
|
if (args.plugin && String(r?.id) !== String(args.plugin)) continue;
|
|
529
|
-
// Extract the resource identifier directly from the finding object
|
|
530
|
-
// priority as describeFinding
|
|
531
|
-
//
|
|
532
|
-
|
|
529
|
+
// Extract the resource identifier directly from the finding object using the SAME
|
|
530
|
+
// key priority as describeFinding (the shared RESOURCE_KEYS imported from
|
|
531
|
+
// cloud_finding_summary.mjs) — avoids split-after-truncation ambiguity when
|
|
532
|
+
// describeFinding truncates into the ' — ' separator, and can never drift from it.
|
|
533
533
|
let res = '';
|
|
534
|
-
for (const k of
|
|
534
|
+
for (const k of RESOURCE_KEYS) { if (f && f[k]) { res = String(f[k]); break; } }
|
|
535
535
|
rows.push({ plugin: String(r?.id ?? ''), severity: sev, category: cat,
|
|
536
536
|
resource: res, region: f?.region || f?.details?.region || '',
|
|
537
537
|
text: Array.isArray(f?.issues) ? f.issues.join(' · ') : String(f?.title || f?.classification || '') });
|
package/package.json
CHANGED
|
@@ -9,7 +9,10 @@ const RANK = { CRITICAL: 5, HIGH: 4, MEDIUM: 3, LOW: 2, INFO: 1, PASS: 0 };
|
|
|
9
9
|
// Resource-identifying keys, most-specific first so a precise label wins over the
|
|
10
10
|
// generic resource/name/arn fallbacks. Grounded in the REAL EE plugin emissions
|
|
11
11
|
// (S3 1020 emits `bucket`, Key Vault `vault`, DynamoDB `table`, KMS `key`, …).
|
|
12
|
-
|
|
12
|
+
// Exported as the SINGLE SOURCE OF TRUTH — get_findings (mcp_server.mjs) imports this
|
|
13
|
+
// rather than re-declaring the list, so the two resource-extraction surfaces can never
|
|
14
|
+
// drift on which key names a finding's resource.
|
|
15
|
+
export const RESOURCE_KEYS = ['userName', 'bucket', 'bucketName', 'function', 'functionName', 'table', 'tableName', 'instanceId', 'group', 'groupId', 'key', 'keyId', 'vault', 'vaultName', 'pipeline', 'topic', 'queue', 'projectId', 'domain', 'secretName', 'roleName', 'accountName', 'resource', 'resourceId', 'name', 'arn'];
|
|
13
16
|
const REASON_KEYS = ['classification', 'title', 'message', 'reason', 'finding', 'detail'];
|
|
14
17
|
const UNKNOWN_PROVIDER = 'unknown';
|
|
15
18
|
// Scan-coverage gap prose — an EXACT 1:1 mirror of the EE evidence-gap anchor
|