filegrc 0.16.6 → 0.16.7

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "filegrc",
3
- "version": "0.16.6",
3
+ "version": "0.16.7",
4
4
  "description": "Zero-dependency Git-native GRC engine",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -120,6 +120,8 @@ Removable media containing Confidential or Restricted data requires owner approv
120
120
 
121
121
  The Data Retention Schedule defines the approved period and disposal method for important in-scope record classes. Supporting standards, procedures, and system records document implementation. Disposal must be suitable for the media and classification, with dated proof when the Control requires it.
122
122
 
123
+ Owners document and test how approved deletion requests and retention cutoffs apply to primary data, derived copies, local copies, Vendor-held data, and backups. Procedures identify copies that cannot be removed immediately, their access restrictions and expiry, and any legal hold or contractual limit. Owners verify completion against the approved scope before representing data as deleted.
124
+
123
125
  ## Cryptography, Encryption, Key, and Secrets Management Policy
124
126
 
125
127
  ### Encryption requirements
@@ -164,6 +166,8 @@ Passwords and other authenticators must meet settings approved for the System's
164
166
  - **Customer and external-user access:** MFA is required when an approved Control, customer commitment, or risk decision requires it.
165
167
  - **Exceptions:** Where required MFA is unavailable, management must approve a time-bound Exception with a risk assessment, compensating Controls, an accountable owner, and a review or expiration date.
166
168
 
169
+ Owners document customer authentication and workforce authentication separately for each relevant System. They record whether either path uses single sign-on, where MFA is enforced, and how access is revoked. Remote-access methods are selected and approved for the System and risk; a VPN is required only when an approved Control, commitment, or risk decision calls for one.
170
+
167
171
  ## Endpoint, Mobile Device, BYOD, and Malware Protection Policy
168
172
 
169
173
  ### Company devices and platform protection
@@ -194,6 +198,8 @@ Owners restrict inbound, outbound, and internal network paths and management int
194
198
 
195
199
  Production, development, test, and general-user environments must be separated to the extent needed for their data, exposure, privileges, and change risk. Connections between environments require approved paths and safeguards. Wireless and other local networks used for company work require authentication and encryption appropriate to current risk and technical capability.
196
200
 
201
+ When a service processes data for multiple customers, owners define and enforce customer-data boundaries appropriate to the architecture. They verify that access paths and material changes preserve those boundaries, and record the test method, result, and follow-up.
202
+
197
203
  ## Configuration Management and System Maintenance Policy
198
204
 
199
205
  Important Systems and Components use documented secure configuration expectations based on trusted guidance, technical capability, and risk. Owners change or disable unnecessary default accounts, credentials, services, ports, features, and configurations. Deviations require review and, when material, an approved Exception.
@@ -230,6 +236,8 @@ Important Systems record and protect the security and operational events needed
230
236
 
231
237
  Logs use synchronized time, restrict alteration and access, and avoid unnecessary secrets or personal data. Each System's retention period belongs in the approved Data Retention Schedule. Owners document risk-based alerts, review paths, thresholds, and response ownership in approved standards, procedures, and schedules.
232
238
 
239
+ When an incident may require investigation, responders preserve relevant logs and their context under the incident process, with controlled access and a documented retention or hold decision.
240
+
233
241
  ### Monitoring and alert testing
234
242
 
235
243
  Systems with availability commitments, recovery objectives, or material operational dependencies monitor the health, capacity, failure, and service indicators needed to detect degradation. Representative alert paths are tested from generation through acknowledgement, escalation, and fallback on the approved schedule and after a material path change. This requirement does not prescribe a particular monitoring or log-management product.
@@ -146,6 +146,7 @@ const DOCUMENT_CONTENT_UPDATES = [
146
146
  }
147
147
  ];
148
148
  const PRIOR_STARTER_POLICY_REVISIONS = new Set([
149
+ "b440eb17797624c1b456f778b12a955c871de308349e565b5d69ab6a25703673",
149
150
  "b0f9b988a8bd231fe70ce71b6a732970e709b7af7826c1b55f1532f511b6e511",
150
151
  "e87961c6a665d73e9d3cce96ab978df87579668e72ea236248680db1f69a5fa1",
151
152
  "2b50c75f4f138eebc7154a6b6e0e50b843f016c228632f7c71239ec27c18cbbf",
@@ -157,6 +158,16 @@ const PRIOR_STARTER_POLICY_REVISIONS = new Set([
157
158
  ]);
158
159
 
159
160
  const CONTROL_UPDATES = [
161
+ {
162
+ id: "control-access-review-offboarding",
163
+ prior: [{
164
+ activity: "Review access populations, record decisions, and remove dormant, expired, or unneeded access."
165
+ }],
166
+ next: {
167
+ activity: "Review complete access populations, including workers and third parties with customer-data access, record decisions, and remove dormant, expired, or unneeded access."
168
+ },
169
+ summary: "Prompt a complete customer-data access population without changing the approved review cadence."
170
+ },
160
171
  {
161
172
  id: "control-policy-management",
162
173
  prior: [{
@@ -283,15 +294,21 @@ const CONTROL_UPDATES = [
283
294
  },
284
295
  {
285
296
  id: "control-network-security",
286
- prior: [{
287
- statement: "The organization restricts network paths, protects remote access with approved encryption and authentication, and reviews material network access rules at least annually.",
288
- activity: "Manage boundaries, firewall rules, wireless safeguards, and remote production access."
289
- }],
297
+ prior: [
298
+ {
299
+ statement: "The organization restricts network paths, protects remote access with approved encryption and authentication, and reviews material network access rules at least annually.",
300
+ activity: "Manage boundaries, firewall rules, wireless safeguards, and remote production access."
301
+ },
302
+ {
303
+ statement: "The organization restricts network paths, separates production and nonproduction environments according to data and risk, protects remote access with approved encryption and authentication, and reviews material network access rules at least annually.",
304
+ activity: "Manage boundaries, environment connections, firewall rules, wireless safeguards, and remote production access."
305
+ }
306
+ ],
290
307
  next: {
291
308
  statement: "The organization restricts network paths, separates production and nonproduction environments according to data and risk, protects remote access with approved encryption and authentication, and reviews material network access rules at least annually.",
292
- activity: "Manage boundaries, environment connections, firewall rules, wireless safeguards, and remote production access."
309
+ activity: "Document and verify customer and environment boundaries, approved network rules and deviations by source, wireless safeguards, and remote production access."
293
310
  },
294
- summary: "Add risk-based production and nonproduction environment separation."
311
+ summary: "Prompt evidence for customer and environment boundaries and network-rule coverage."
295
312
  },
296
313
  {
297
314
  id: "control-change-management",
@@ -340,23 +357,32 @@ const CONTROL_UPDATES = [
340
357
  {
341
358
  activity: "Use continuous platform protection where supported and verify endpoint configuration, update, and compliance state on the risk-based schedule recorded in an Obligation when periodic work is needed.",
342
359
  requirementIds: ["requirement-soc2-cc6-6", "requirement-soc2-cc6-8", "requirement-soc2-cc7-1"]
360
+ },
361
+ {
362
+ activity: "Use continuous platform protection where supported and verify endpoint configuration, update, and compliance state on the approved risk-based schedule when periodic work is needed.",
363
+ requirementIds: ["requirement-soc2-cc6-6", "requirement-soc2-cc6-8", "requirement-soc2-cc7-1"]
343
364
  }
344
365
  ],
345
366
  next: {
346
- activity: "Use continuous platform protection where supported and verify endpoint configuration, update, and compliance state on the approved risk-based schedule when periodic work is needed.",
367
+ activity: "Document protection coverage and approved deviations by device or platform class. Use continuous platform protection where supported and verify configuration, updates, and compliance on the approved risk-based schedule when periodic work is needed.",
347
368
  requirementIds: ["requirement-soc2-cc6-6", "requirement-soc2-cc6-8", "requirement-soc2-cc7-1"]
348
369
  },
349
- summary: "Map endpoint malware protection to CC6.8 and keep implementation scheduling out of the Control description."
370
+ summary: "Prompt platform protection coverage, deviations, and verification without mandating one product."
350
371
  },
351
372
  {
352
373
  id: "control-vulnerability-management",
353
- prior: [{
354
- activity: "Choose scan coverage and cadence. Review the starter remediation targets of Critical 7 days, High 14 days, Medium 30 days, and Low 90 days, then record the approved targets or time-bound Exceptions."
355
- }],
374
+ prior: [
375
+ {
376
+ activity: "Choose scan coverage and cadence. Review the starter remediation targets of Critical 7 days, High 14 days, Medium 30 days, and Low 90 days, then record the approved targets or time-bound Exceptions."
377
+ },
378
+ {
379
+ activity: "Choose scan coverage and cadence, define approved risk-based remediation targets, and document time-bound Exceptions when a target cannot be met."
380
+ }
381
+ ],
356
382
  next: {
357
- activity: "Choose scan coverage and cadence, define approved risk-based remediation targets, and document time-bound Exceptions when a target cannot be met."
383
+ activity: "Define scan scope and cadence, severity criteria, risk-based remediation and patch targets, and time-bound Exceptions when a target cannot be met."
358
384
  },
359
- summary: "Keep starter-selection instructions and unapproved remediation targets out of the Control description."
385
+ summary: "Prompt explicit scan scope, severity criteria, and approved remediation and patch targets."
360
386
  },
361
387
  {
362
388
  id: "control-logging-monitoring",
@@ -403,6 +429,16 @@ const CONTROL_UPDATES = [
403
429
  activity: "Assess service, data, access, assurance, recovery, incidents, dependencies, supplied Components, and applicable contract safeguards before access or material reliance."
404
430
  },
405
431
  summary: "Name the contract outcomes considered when a Vendor handles protected data or supports an important service."
432
+ },
433
+ {
434
+ id: "control-vendor-monitoring",
435
+ prior: [{
436
+ activity: "Review vendor performance, assurance, recovery, access, incidents, and contract obligations."
437
+ }],
438
+ next: {
439
+ activity: "Set review intervals by Vendor risk and customer-data access. Review performance, assurance, recovery, access, incidents, and contract obligations, and reassess after material change."
440
+ },
441
+ summary: "Prompt review intervals for every customer-data Vendor while keeping the interval risk-based."
406
442
  }
407
443
  ];
408
444
 
@@ -439,6 +475,16 @@ const OBLIGATION_UPDATES = [
439
475
  }
440
476
  ];
441
477
 
478
+ const PRIOR_STARTER_RULE_RATIONALE = "Starter proposal derived from the linked Policy. Management must review the cadence, population, completion criteria, and timing before activation.";
479
+ const OBLIGATION_RULE_RATIONALE_UPDATES = [
480
+ ["obligation-rule-quarterly-privileged-access-review-v1", "Cover privileged and production access. Add other customer-data access only when an approved commitment or risk decision requires quarterly review."],
481
+ ["obligation-rule-annual-access-review-v1", "Cover other important access, including customer-data paths not assigned to a shorter approved review schedule. Avoid counting the same access twice."],
482
+ ["obligation-rule-monthly-endpoint-protection-verification-v1", "Confirm device and platform classes, protection coverage, exceptions, evidence, and whether the monthly cadence fits the approved risk decision."],
483
+ ["obligation-rule-annual-network-access-review-v1", "Confirm the in-scope network and host rule sources, customer and environment boundaries, deviations, and review cadence."],
484
+ ["obligation-rule-quarterly-vulnerability-scan-v1", "Confirm scan scope, severity method, remediation and patch targets, and whether exposure or a customer commitment requires a shorter cadence, such as monthly."],
485
+ ["obligation-rule-annual-critical-vendor-review-v1", "Confirm the high and critical Vendor population, and set a separate review interval for other Vendors with customer-data access where needed."]
486
+ ].map(([id, guidance]) => ({ id, rationale: `${PRIOR_STARTER_RULE_RATIONALE} ${guidance}` }));
487
+
442
488
  const OBLIGATION_ADDITIONS = [
443
489
  {
444
490
  id: "obligation-annual-control-design-review",
@@ -760,6 +806,37 @@ async function buildPolicyLibraryPlan(loaded) {
760
806
  });
761
807
  }
762
808
 
809
+ for (const { id, rationale } of OBLIGATION_RULE_RATIONALE_UPDATES) {
810
+ const entry = byId.get(id);
811
+ const obligation = entry ? byId.get(entry.record.obligationId)?.record : null;
812
+ const displayPath = `data/obligation-rules/${id}.json`;
813
+ if (!entry || entry.record.type !== "obligation-rule" || !obligation || obligation.type !== "obligation") {
814
+ skipped.push(skippedItem(id, "missing", `The starter ${id} Obligation Rule is not present.`));
815
+ continue;
816
+ }
817
+ if (entry.record.rationale === rationale) {
818
+ skipped.push(skippedItem(id, "current", "The Obligation Rule already contains the current starter guidance."));
819
+ continue;
820
+ }
821
+ if (entry.record.status !== "proposed" || obligation.status !== "proposed") {
822
+ skipped.push(skippedItem(id, "operating", "Only proposed Obligations and Rules are eligible for starter-library guidance updates."));
823
+ continue;
824
+ }
825
+ if (entry.record.rationale !== PRIOR_STARTER_RULE_RATIONALE || !obligation.ruleIds?.includes(id)) {
826
+ skipped.push(skippedItem(id, "customized", "The Obligation Rule differs from a recognized prior starter, so FileGRC will not rewrite it."));
827
+ continue;
828
+ }
829
+ updates.push({ ...entry.record, rationale });
830
+ expectedRevisions[id] = entry.revision;
831
+ proposalChanges.push({
832
+ resourceType: "obligation-rule",
833
+ resourceId: id,
834
+ path: displayPath,
835
+ summary: "Add scope and cadence checks to the unchanged proposed starter rule.",
836
+ diff: replacementDiff(displayPath, [["rationale", entry.record.rationale, rationale]])
837
+ });
838
+ }
839
+
763
840
  for (const addition of modelSupports(loaded.model, "program-scope") ? OBLIGATION_ADDITIONS : []) {
764
841
  if (byId.has(addition.id)) {
765
842
  skipped.push(skippedItem(addition.id, "present", "An Obligation with this ID already exists, so FileGRC will not replace it."));