@mitre/hdf-converters 2.5.1 → 2.6.5

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.
Files changed (111) hide show
  1. package/lib/data/aws-config-mapping.json +638 -0
  2. package/lib/data/cci-nist-mapping.json +3553 -0
  3. package/lib/data/converters/csv2json.d.ts +1 -0
  4. package/lib/data/converters/csv2json.js +36 -0
  5. package/lib/data/converters/csv2json.js.map +1 -0
  6. package/lib/data/converters/csv2json.ts +36 -0
  7. package/lib/data/converters/xml2json.d.ts +14 -0
  8. package/lib/data/converters/xml2json.js +42 -0
  9. package/lib/data/converters/xml2json.js.map +1 -0
  10. package/lib/data/converters/xml2json.ts +57 -0
  11. package/lib/data/cwe-nist-mapping.json +1416 -0
  12. package/lib/data/nessus-plugins-nist-mapping.json +644 -0
  13. package/lib/data/nikto-nist-mapping.json +53648 -0
  14. package/lib/data/owasp-nist-mapping.json +72 -0
  15. package/lib/data/scoutsuite-nist-mapping.json +558 -0
  16. package/lib/index.d.ts +4 -0
  17. package/lib/index.js +4 -0
  18. package/lib/index.js.map +1 -1
  19. package/lib/package.json +17 -7
  20. package/lib/src/asff-mapper.d.ts +15 -0
  21. package/lib/src/asff-mapper.js +508 -0
  22. package/lib/src/asff-mapper.js.map +1 -0
  23. package/lib/src/aws-config-mapper.d.ts +28 -0
  24. package/lib/src/aws-config-mapper.js +369 -0
  25. package/lib/src/aws-config-mapper.js.map +1 -0
  26. package/lib/src/base-converter.d.ts +3 -7
  27. package/lib/src/base-converter.js +26 -8
  28. package/lib/src/base-converter.js.map +1 -1
  29. package/lib/src/burpsuite-mapper.js +1 -3
  30. package/lib/src/burpsuite-mapper.js.map +1 -1
  31. package/lib/src/converters-from-hdf/asff/asff-types.d.ts +88 -0
  32. package/lib/src/converters-from-hdf/asff/asff-types.js +3 -0
  33. package/lib/src/converters-from-hdf/asff/asff-types.js.map +1 -0
  34. package/lib/src/converters-from-hdf/asff/reverse-asff-mapper.d.ts +31 -0
  35. package/lib/src/converters-from-hdf/asff/reverse-asff-mapper.js +132 -0
  36. package/lib/src/converters-from-hdf/asff/reverse-asff-mapper.js.map +1 -0
  37. package/lib/src/converters-from-hdf/asff/transformers.d.ts +44 -0
  38. package/lib/src/converters-from-hdf/asff/transformers.js +397 -0
  39. package/lib/src/converters-from-hdf/asff/transformers.js.map +1 -0
  40. package/lib/src/converters-from-hdf/reverse-base-converter.d.ts +24 -0
  41. package/lib/src/converters-from-hdf/reverse-base-converter.js +111 -0
  42. package/lib/src/converters-from-hdf/reverse-base-converter.js.map +1 -0
  43. package/lib/src/jfrog-xray-mapper.js +1 -3
  44. package/lib/src/jfrog-xray-mapper.js.map +1 -1
  45. package/lib/src/mappings/AwsConfigMapping.d.ts +6 -0
  46. package/lib/src/mappings/AwsConfigMapping.js +39 -0
  47. package/lib/src/mappings/AwsConfigMapping.js.map +1 -0
  48. package/lib/src/mappings/AwsConfigMappingItem.d.ts +7 -0
  49. package/lib/src/mappings/AwsConfigMappingItem.js +28 -0
  50. package/lib/src/mappings/AwsConfigMappingItem.js.map +1 -0
  51. package/lib/src/mappings/CciNistMapping.d.ts +1 -1
  52. package/lib/src/mappings/CciNistMapping.js +5 -24
  53. package/lib/src/mappings/CciNistMapping.js.map +1 -1
  54. package/lib/src/mappings/CweNistMapping.d.ts +8 -1
  55. package/lib/src/mappings/CweNistMapping.js +4 -27
  56. package/lib/src/mappings/CweNistMapping.js.map +1 -1
  57. package/lib/src/mappings/CweNistMappingItem.d.ts +2 -1
  58. package/lib/src/mappings/CweNistMappingItem.js +9 -9
  59. package/lib/src/mappings/CweNistMappingItem.js.map +1 -1
  60. package/lib/src/mappings/NessusPluginsNistMapping.d.ts +7 -1
  61. package/lib/src/mappings/NessusPluginsNistMapping.js +4 -8
  62. package/lib/src/mappings/NessusPluginsNistMapping.js.map +1 -1
  63. package/lib/src/mappings/NessusPluginsNistMappingItem.d.ts +2 -1
  64. package/lib/src/mappings/NessusPluginsNistMappingItem.js +16 -6
  65. package/lib/src/mappings/NessusPluginsNistMappingItem.js.map +1 -1
  66. package/lib/src/mappings/NiktoNistMapping.d.ts +7 -1
  67. package/lib/src/mappings/NiktoNistMapping.js +4 -8
  68. package/lib/src/mappings/NiktoNistMapping.js.map +1 -1
  69. package/lib/src/mappings/NiktoNistMappingItem.d.ts +2 -1
  70. package/lib/src/mappings/NiktoNistMappingItem.js +7 -7
  71. package/lib/src/mappings/NiktoNistMappingItem.js.map +1 -1
  72. package/lib/src/mappings/OwaspNistMapping.d.ts +8 -1
  73. package/lib/src/mappings/OwaspNistMapping.js +4 -8
  74. package/lib/src/mappings/OwaspNistMapping.js.map +1 -1
  75. package/lib/src/mappings/OwaspNistMappingItem.d.ts +2 -1
  76. package/lib/src/mappings/OwaspNistMappingItem.js +9 -9
  77. package/lib/src/mappings/OwaspNistMappingItem.js.map +1 -1
  78. package/lib/src/mappings/ScoutsuiteNistMapping.d.ts +5 -1
  79. package/lib/src/mappings/ScoutsuiteNistMapping.js +4 -10
  80. package/lib/src/mappings/ScoutsuiteNistMapping.js.map +1 -1
  81. package/lib/src/mappings/ScoutsuiteNistMappingItem.d.ts +2 -1
  82. package/lib/src/mappings/ScoutsuiteNistMappingItem.js +4 -4
  83. package/lib/src/mappings/ScoutsuiteNistMappingItem.js.map +1 -1
  84. package/lib/src/nessus-mapper.js +2 -5
  85. package/lib/src/nessus-mapper.js.map +1 -1
  86. package/lib/src/netsparker-mapper.js +2 -5
  87. package/lib/src/netsparker-mapper.js.map +1 -1
  88. package/lib/src/nikto-mapper.js +1 -3
  89. package/lib/src/nikto-mapper.js.map +1 -1
  90. package/lib/src/sarif-mapper.js +1 -3
  91. package/lib/src/sarif-mapper.js.map +1 -1
  92. package/lib/src/scoutsuite-mapper.js +1 -3
  93. package/lib/src/scoutsuite-mapper.js.map +1 -1
  94. package/lib/src/snyk-mapper.js +1 -6
  95. package/lib/src/snyk-mapper.js.map +1 -1
  96. package/lib/src/sonarqube-mapper.d.ts +54 -0
  97. package/lib/src/sonarqube-mapper.js +196 -0
  98. package/lib/src/sonarqube-mapper.js.map +1 -0
  99. package/lib/src/xccdf-results-mapper.js +1 -3
  100. package/lib/src/xccdf-results-mapper.js.map +1 -1
  101. package/lib/src/zap-mapper.d.ts +1 -1
  102. package/lib/src/zap-mapper.js +7 -4
  103. package/lib/src/zap-mapper.js.map +1 -1
  104. package/package.json +17 -7
  105. package/lib/data/U_CCI_List.xml +0 -38403
  106. package/lib/data/aws-config-mapping.csv +0 -107
  107. package/lib/data/cwe-nist-mapping.csv +0 -203
  108. package/lib/data/nessus-plugins-nist-mapping.csv +0 -108
  109. package/lib/data/nikto-nist-mapping.csv +0 -8942
  110. package/lib/data/owasp-nist-mapping.csv +0 -11
  111. package/lib/data/scoutsuite-nist-mapping.csv +0 -140
@@ -0,0 +1 @@
1
+ {"version":3,"file":"asff-types.js","sourceRoot":"","sources":["../../../../src/converters-from-hdf/asff/asff-types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,31 @@
1
+ import { ExecJSON } from 'inspecjs';
2
+ import { MappedTransform } from '../../base-converter';
3
+ import { FromHdfBaseConverter } from '../reverse-base-converter';
4
+ import { IExecJSONASFF, IFindingASFF, IOptions } from './asff-types';
5
+ export declare type SegmentedControl = ExecJSON.Control & {
6
+ result: ExecJSON.ControlResult;
7
+ layersOfControl: (ExecJSON.Control & {
8
+ fix?: string;
9
+ profileInfo?: Record<string, unknown>;
10
+ })[];
11
+ };
12
+ export interface ILookupPathASFF {
13
+ path?: string;
14
+ transformer?: (value: SegmentedControl, context?: FromHdfToAsffMapper) => unknown;
15
+ arrayTransformer?: (value: unknown[], file: ExecJSON.Execution) => unknown[];
16
+ key?: string;
17
+ passParent?: boolean;
18
+ }
19
+ export declare class FromHdfToAsffMapper extends FromHdfBaseConverter {
20
+ mappings: MappedTransform<IExecJSONASFF, ILookupPathASFF>;
21
+ contextProfiles: any;
22
+ counts: any;
23
+ ioptions: IOptions;
24
+ index?: number;
25
+ impactMapping: Map<number, string>;
26
+ constructor(hdfObj: ExecJSON.Execution, options: IOptions | undefined);
27
+ defaultOptions(): IOptions;
28
+ setMappings(customMappings: MappedTransform<IExecJSONASFF, ILookupPathASFF>): void;
29
+ controlsToSegments(): SegmentedControl[];
30
+ toAsff(): IFindingASFF[];
31
+ }
@@ -0,0 +1,132 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.FromHdfToAsffMapper = void 0;
4
+ const inspecjs_1 = require("inspecjs");
5
+ const reverse_base_converter_1 = require("../reverse-base-converter");
6
+ const transformers_1 = require("./transformers");
7
+ class FromHdfToAsffMapper extends reverse_base_converter_1.FromHdfBaseConverter {
8
+ constructor(hdfObj, options) {
9
+ super(hdfObj);
10
+ this.mappings = {
11
+ Findings: [
12
+ {
13
+ SchemaVersion: '2018-10-08',
14
+ Id: { path: ``, transformer: transformers_1.setupId, passParent: true },
15
+ ProductArn: { path: ``, transformer: transformers_1.setupProductARN, passParent: true },
16
+ AwsAccountId: { path: ``, transformer: transformers_1.setupAwsAcct, passParent: true },
17
+ Types: {
18
+ transformer: () => ['Software and Configuration Checks']
19
+ },
20
+ CreatedAt: { path: ``, transformer: transformers_1.setupCreated },
21
+ Region: { path: '', transformer: transformers_1.setupRegion, passParent: true },
22
+ UpdatedAt: { path: ``, transformer: transformers_1.setupUpdated, passParent: true },
23
+ GeneratorId: {
24
+ path: '',
25
+ transformer: transformers_1.setupGeneratorId,
26
+ passParent: true
27
+ },
28
+ Title: { path: '', transformer: transformers_1.setupTitle },
29
+ Description: { path: '', transformer: transformers_1.setupDescr },
30
+ FindingProviderFields: {
31
+ Severity: {
32
+ Label: { path: '', transformer: transformers_1.setupSevLabel, passParent: true },
33
+ Original: { path: '', transformer: transformers_1.setupSevLabel, passParent: true }
34
+ },
35
+ Types: { path: '', transformer: transformers_1.setupFindingType, passParent: true }
36
+ },
37
+ Remediation: {
38
+ Recommendation: {
39
+ Text: { path: '', transformer: transformers_1.setupRemRec }
40
+ }
41
+ },
42
+ ProductFields: {
43
+ Check: { path: '', transformer: transformers_1.setupProdFieldCheck }
44
+ },
45
+ Severity: {
46
+ Label: { path: '', transformer: transformers_1.setupSevLabel, passParent: true },
47
+ Original: { path: '', transformer: transformers_1.setupSevOriginal }
48
+ },
49
+ Resources: [
50
+ {
51
+ Type: 'AwsAccount',
52
+ Id: { path: '', transformer: transformers_1.setupResourcesID, passParent: true },
53
+ Partition: 'aws',
54
+ Region: { path: '', transformer: transformers_1.setupRegion, passParent: true }
55
+ },
56
+ {
57
+ Id: { path: '', transformer: transformers_1.setupResourcesID2 },
58
+ Type: 'AwsIamRole',
59
+ Details: {
60
+ AwsIamRole: {
61
+ AssumeRolePolicyDocument: {
62
+ path: '',
63
+ transformer: transformers_1.setupDetailsAssume
64
+ }
65
+ }
66
+ }
67
+ }
68
+ ],
69
+ Compliance: {
70
+ RelatedRequirements: {
71
+ transformer: () => [
72
+ 'SEE REMEDIATION FIELD FOR RESULTS AND RECOMMENDED ACTION(S)'
73
+ ]
74
+ },
75
+ Status: { path: '', transformer: transformers_1.setupControlStatus }
76
+ }
77
+ }
78
+ ]
79
+ };
80
+ this.impactMapping = new Map([
81
+ [0.9, 'CRITICAL'],
82
+ [0.7, 'HIGH'],
83
+ [0.5, 'MEDIUM'],
84
+ [0.3, 'LOW'],
85
+ [0.0, 'INFORMATIONAL']
86
+ ]);
87
+ this.ioptions = options === undefined ? this.defaultOptions() : options;
88
+ this.contextProfiles = (0, inspecjs_1.contextualizeEvaluation)(hdfObj);
89
+ this.counts = (0, transformers_1.statusCount)(this.contextProfiles);
90
+ }
91
+ defaultOptions() {
92
+ return {
93
+ input: '',
94
+ awsAccountId: '',
95
+ target: 'default',
96
+ region: ''
97
+ };
98
+ }
99
+ setMappings(customMappings) {
100
+ super.setMappings(customMappings);
101
+ }
102
+ controlsToSegments() {
103
+ const segments = [];
104
+ this.data.profiles.forEach((profile) => {
105
+ profile.controls.reverse().forEach((control) => {
106
+ control.results.forEach((segment) => {
107
+ segments.push({
108
+ ...control,
109
+ result: segment,
110
+ layersOfControl: (0, transformers_1.getAllLayers)(this.data, control)
111
+ });
112
+ });
113
+ });
114
+ });
115
+ return segments;
116
+ }
117
+ toAsff() {
118
+ if (this.mappings === undefined) {
119
+ throw new Error('Mappings must be provided');
120
+ }
121
+ else {
122
+ const resList = this.controlsToSegments().map((segment, index) => {
123
+ this.index = index;
124
+ return this.convertInternal(segment, this.mappings)['Findings'][0];
125
+ });
126
+ resList.push((0, transformers_1.createProfileInfoFinding)(this.data, this.ioptions));
127
+ return resList;
128
+ }
129
+ }
130
+ }
131
+ exports.FromHdfToAsffMapper = FromHdfToAsffMapper;
132
+ //# sourceMappingURL=reverse-asff-mapper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reverse-asff-mapper.js","sourceRoot":"","sources":["../../../../src/converters-from-hdf/asff/reverse-asff-mapper.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,44 @@
1
+ import { ContextualizedEvaluation, ExecJSON } from 'inspecjs';
2
+ import { IFindingASFF, IOptions } from './asff-types';
3
+ import { FromHdfToAsffMapper, SegmentedControl } from './reverse-asff-mapper';
4
+ declare type Counts = {
5
+ Passed: number;
6
+ PassedTests: number;
7
+ Failed: number;
8
+ FailedTests: number;
9
+ PassingTestsFailedControl: number;
10
+ NotApplicable: number;
11
+ NotReviewed: number;
12
+ };
13
+ export declare function getRunTime(hdf: ExecJSON.Execution): Date;
14
+ export declare function createProfileInfoFinding(hdf: ExecJSON.Execution, options: IOptions): IFindingASFF;
15
+ export declare function statusCount(evaluation: ContextualizedEvaluation): Counts;
16
+ export declare function createDescription(counts: Counts): string;
17
+ export declare function createAssumeRolePolicyDocument(layersOfControl: ExecJSON.Control[], segment: ExecJSON.ControlResult): string;
18
+ export declare function sliceIntoChunks(arr: any[], chunkSize: number): any[][];
19
+ export declare function cleanText(text?: string | null): string | undefined;
20
+ export declare function getAllLayers(hdf: ExecJSON.Execution, knownControl: ExecJSON.Control): ExecJSON.Control[];
21
+ export declare function createNote(segment: ExecJSON.ControlResult): string;
22
+ export declare function createCode(control: ExecJSON.Control & {
23
+ profileInfo?: Record<string, unknown>;
24
+ }): string;
25
+ export declare function setupId(control: SegmentedControl, context?: FromHdfToAsffMapper): string;
26
+ export declare function setupProductARN(_val: SegmentedControl, context?: FromHdfToAsffMapper): string;
27
+ export declare function setupAwsAcct(_val: SegmentedControl, context?: FromHdfToAsffMapper): string | undefined;
28
+ export declare function setupCreated(control: SegmentedControl): string;
29
+ export declare function setupRegion(_val: SegmentedControl, context?: FromHdfToAsffMapper): string | undefined;
30
+ export declare function setupUpdated(_control: SegmentedControl, context?: FromHdfToAsffMapper): string;
31
+ export declare function setupGeneratorId(control: SegmentedControl, context?: FromHdfToAsffMapper): string;
32
+ export declare function setupTitle(control: SegmentedControl): string;
33
+ export declare function setupDescr(control: SegmentedControl): string;
34
+ export declare function setupSevLabel(control: SegmentedControl, context?: FromHdfToAsffMapper): string;
35
+ export declare function setupSevOriginal(control: SegmentedControl): string;
36
+ export declare function setupFindingType(control: SegmentedControl, context?: FromHdfToAsffMapper): string[];
37
+ export declare function getFixForControl(control: SegmentedControl): any;
38
+ export declare function setupRemRec(control: SegmentedControl): string;
39
+ export declare function setupProdFieldCheck(control: SegmentedControl): string;
40
+ export declare function setupResourcesID(_val: SegmentedControl, context?: FromHdfToAsffMapper): string;
41
+ export declare function setupResourcesID2(control: SegmentedControl): string;
42
+ export declare function setupDetailsAssume(control: SegmentedControl): string;
43
+ export declare function setupControlStatus(control: SegmentedControl): string;
44
+ export {};
@@ -0,0 +1,397 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.setupControlStatus = exports.setupDetailsAssume = exports.setupResourcesID2 = exports.setupResourcesID = exports.setupProdFieldCheck = exports.setupRemRec = exports.getFixForControl = exports.setupFindingType = exports.setupSevOriginal = exports.setupSevLabel = exports.setupDescr = exports.setupTitle = exports.setupGeneratorId = exports.setupUpdated = exports.setupRegion = exports.setupCreated = exports.setupAwsAcct = exports.setupProductARN = exports.setupId = exports.createCode = exports.createNote = exports.getAllLayers = exports.cleanText = exports.sliceIntoChunks = exports.createAssumeRolePolicyDocument = exports.createDescription = exports.statusCount = exports.createProfileInfoFinding = exports.getRunTime = void 0;
7
+ const crypto_1 = require("crypto");
8
+ const inspecjs_1 = require("inspecjs");
9
+ const lodash_1 = __importDefault(require("lodash"));
10
+ const moment_1 = __importDefault(require("moment"));
11
+ function getRunTime(hdf) {
12
+ let time = new Date();
13
+ hdf.profiles.forEach((profile) => {
14
+ if (profile.controls[0].results.length &&
15
+ profile.controls[0].results[0].start_time) {
16
+ time = new Date(profile.controls[0].results[0].start_time);
17
+ }
18
+ });
19
+ return time;
20
+ }
21
+ exports.getRunTime = getRunTime;
22
+ function filter_overlays(controls) {
23
+ const idHash = {};
24
+ controls.forEach((c) => {
25
+ const id = c.hdf.wraps.id;
26
+ const old = idHash[id];
27
+ if (old) {
28
+ const newSignificant = c.hdf.status_list && c.hdf.status_list.length > 0;
29
+ if (newSignificant) {
30
+ idHash[id] = c;
31
+ }
32
+ }
33
+ else {
34
+ idHash[id] = c;
35
+ }
36
+ });
37
+ return Array.from(Object.values(idHash));
38
+ }
39
+ function createProfileInfoFinding(hdf, options) {
40
+ const runTime = getRunTime(hdf);
41
+ const inspecJSJson = (0, inspecjs_1.convertFile)(JSON.stringify(hdf));
42
+ const contextualizedEvaluation = (0, inspecjs_1.contextualizeEvaluation)(inspecJSJson['1_0_ExecJson']);
43
+ const counts = statusCount(contextualizedEvaluation);
44
+ const updatedAt = new Date();
45
+ updatedAt.setMilliseconds(updatedAt.getMilliseconds() +
46
+ (contextualizedEvaluation.contains[0].contains.length || 0));
47
+ const profileInfo = {
48
+ SchemaVersion: '2018-10-08',
49
+ Id: `${options.target}/${hdf.profiles[0].name}`,
50
+ ProductArn: `arn:aws:securityhub:${options.region}:${options.awsAccountId}:product/${options.awsAccountId}/default`,
51
+ GeneratorId: `arn:aws:securityhub:us-east-2:${options.awsAccountId}:ruleset/set/${hdf.profiles[0].name}`,
52
+ AwsAccountId: options.awsAccountId,
53
+ CreatedAt: runTime.toISOString(),
54
+ UpdatedAt: updatedAt,
55
+ Title: `${options.target} | ${hdf.profiles[0].name} | ${(0, moment_1.default)().format('YYYY-MM-DD hh:mm:ss [GMT]ZZ')}`,
56
+ Description: createDescription(counts),
57
+ Severity: {
58
+ Label: 'INFORMATIONAL'
59
+ },
60
+ FindingProviderFields: {
61
+ Severity: {
62
+ Label: 'INFORMATIONAL'
63
+ },
64
+ Types: createProfileInfoFindingFields(hdf)
65
+ },
66
+ Resources: [
67
+ {
68
+ Type: 'AwsAccount',
69
+ Id: `AWS::::Account:${options.awsAccountId}`,
70
+ Partition: 'aws',
71
+ Region: options.region
72
+ }
73
+ ]
74
+ };
75
+ return profileInfo;
76
+ }
77
+ exports.createProfileInfoFinding = createProfileInfoFinding;
78
+ function statusCount(evaluation) {
79
+ let controls = [];
80
+ evaluation.contains.forEach((p) => controls.push(...p.contains));
81
+ controls = filter_overlays(controls);
82
+ const statusCounts = {
83
+ Passed: 0,
84
+ PassedTests: 0,
85
+ PassingTestsFailedControl: 0,
86
+ Failed: 0,
87
+ FailedTests: 0,
88
+ NotApplicable: 0,
89
+ NotReviewed: 0
90
+ };
91
+ controls.forEach((control) => {
92
+ if (control.hdf.status === 'Passed') {
93
+ statusCounts.Passed += 1;
94
+ statusCounts.PassedTests += (control.hdf.segments || []).length;
95
+ }
96
+ else if (control.hdf.status === 'Failed') {
97
+ statusCounts.PassingTestsFailedControl += (control.hdf.segments || []).filter((s) => s.status === 'passed').length;
98
+ statusCounts.FailedTests += (control.hdf.segments || []).filter((s) => s.status === 'failed').length;
99
+ statusCounts.Failed += 1;
100
+ }
101
+ else if (control.hdf.status === 'Not Applicable') {
102
+ statusCounts.NotApplicable += 1;
103
+ }
104
+ else if (control.hdf.status === 'Not Reviewed') {
105
+ statusCounts.NotReviewed += 1;
106
+ }
107
+ });
108
+ return statusCounts;
109
+ }
110
+ exports.statusCount = statusCount;
111
+ function createDescription(counts) {
112
+ return `Passed: ${counts.Passed} (${counts.PassedTests} individual checks passed) --- Failed: ${counts.Failed} (${counts.PassingTestsFailedControl} individual checks failed out of ${counts.PassingTestsFailedControl + counts.FailedTests} total checks) --- Not Applicable: ${counts.NotApplicable} (System exception or absent component) --- Not Reviewed: ${counts.NotReviewed} (Can only be tested manually at this time)`;
113
+ }
114
+ exports.createDescription = createDescription;
115
+ function createAssumeRolePolicyDocument(layersOfControl, segment) {
116
+ const segmentOverview = createNote(segment);
117
+ const code = layersOfControl.map((layer) => createCode(layer)).join('\n\n');
118
+ return `${code}\n\n${segmentOverview}`;
119
+ }
120
+ exports.createAssumeRolePolicyDocument = createAssumeRolePolicyDocument;
121
+ function sliceIntoChunks(arr, chunkSize) {
122
+ const res = [];
123
+ for (let i = 0; i < arr.length; i += chunkSize) {
124
+ const chunk = arr.slice(i, i + chunkSize);
125
+ res.push(chunk);
126
+ }
127
+ return res;
128
+ }
129
+ exports.sliceIntoChunks = sliceIntoChunks;
130
+ function cleanText(text) {
131
+ if (text) {
132
+ return text.replace(/ +/g, ' ').replace(/\r?\n|\r/g, ' ');
133
+ }
134
+ else {
135
+ return undefined;
136
+ }
137
+ }
138
+ exports.cleanText = cleanText;
139
+ function getAllLayers(hdf, knownControl) {
140
+ if (hdf.profiles.length === 1) {
141
+ return [{ ...knownControl, ...lodash_1.default.omit(hdf.profiles, 'controls') }];
142
+ }
143
+ else {
144
+ const foundControls = [];
145
+ hdf.profiles.forEach((profile) => {
146
+ profile.controls.forEach((control) => {
147
+ if (control.id === knownControl.id) {
148
+ foundControls.push(control);
149
+ }
150
+ });
151
+ });
152
+ return foundControls;
153
+ }
154
+ }
155
+ exports.getAllLayers = getAllLayers;
156
+ function createNote(segment) {
157
+ if (segment.message) {
158
+ return `Test Description: ${segment.code_desc} --- Test Result: ${segment.message}`;
159
+ }
160
+ else if (segment.skip_message) {
161
+ return `Test Description: ${segment.code_desc} --- Skip Message: ${segment.skip_message}`;
162
+ }
163
+ else {
164
+ return `Test Description: ${segment.code_desc}`;
165
+ }
166
+ }
167
+ exports.createNote = createNote;
168
+ function createCode(control) {
169
+ var _a, _b;
170
+ return `=========================================================\n# Profile name: ${(_a = control.profileInfo) === null || _a === void 0 ? void 0 : _a.name}\n=========================================================\n\n${(_b = control.code) === null || _b === void 0 ? void 0 : _b.replace(/\\\"/g, '"')}`;
171
+ }
172
+ exports.createCode = createCode;
173
+ function setupId(control, context) {
174
+ const target = context === null || context === void 0 ? void 0 : context.ioptions.target.toLowerCase().trim();
175
+ const name = context === null || context === void 0 ? void 0 : context.data.profiles[0].name;
176
+ return `${target}/${name}/${control.id}/finding/${(0, crypto_1.createHash)('sha256')
177
+ .update(control.id + control.result.code_desc)
178
+ .digest('hex')}`;
179
+ }
180
+ exports.setupId = setupId;
181
+ function setupProductARN(_val, context) {
182
+ return `arn:aws:securityhub:${context === null || context === void 0 ? void 0 : context.ioptions.region}:${context === null || context === void 0 ? void 0 : context.ioptions.awsAccountId}:product/${context === null || context === void 0 ? void 0 : context.ioptions.awsAccountId}/default`;
183
+ }
184
+ exports.setupProductARN = setupProductARN;
185
+ function setupAwsAcct(_val, context) {
186
+ return context === null || context === void 0 ? void 0 : context.ioptions.awsAccountId;
187
+ }
188
+ exports.setupAwsAcct = setupAwsAcct;
189
+ function setupCreated(control) {
190
+ return control.result.start_time || new Date().toISOString();
191
+ }
192
+ exports.setupCreated = setupCreated;
193
+ function setupRegion(_val, context) {
194
+ return context === null || context === void 0 ? void 0 : context.ioptions.region;
195
+ }
196
+ exports.setupRegion = setupRegion;
197
+ function setupUpdated(_control, context) {
198
+ const time = new Date();
199
+ time.setMilliseconds(time.getMilliseconds() + ((context === null || context === void 0 ? void 0 : context.index) || 0));
200
+ return time.toISOString();
201
+ }
202
+ exports.setupUpdated = setupUpdated;
203
+ function setupGeneratorId(control, context) {
204
+ return `arn:aws:securityhub:us-east-2:${context === null || context === void 0 ? void 0 : context.ioptions.awsAccountId}:ruleset/set/${context === null || context === void 0 ? void 0 : context.data.profiles[0].name}/rule/${control.id}`;
205
+ }
206
+ exports.setupGeneratorId = setupGeneratorId;
207
+ function setupTitle(control) {
208
+ const nistTags = control.tags.nist ? `[${control.tags.nist.join(', ')}]` : '';
209
+ return lodash_1.default.truncate(`${control.id} | ${nistTags} | ${cleanText(control.title)}`, { length: 256 });
210
+ }
211
+ exports.setupTitle = setupTitle;
212
+ function setupDescr(control) {
213
+ var _a, _b, _c, _d;
214
+ const checktext = ((_b = (_a = control.descriptions) === null || _a === void 0 ? void 0 : _a.find((description) => description.label === 'check')) === null || _b === void 0 ? void 0 : _b.data) ||
215
+ control.tags['check'] ||
216
+ 'Check not available';
217
+ const currentVal = lodash_1.default.truncate(cleanText(`${control.desc} -- Check Text: ${checktext}`), { length: 1024, omission: '[SEE FULL TEXT IN AssumeRolePolicyDocument]' });
218
+ const caveat = (_d = (_c = control.descriptions) === null || _c === void 0 ? void 0 : _c.find((description) => description.label === 'caveat')) === null || _d === void 0 ? void 0 : _d.data;
219
+ if (caveat) {
220
+ return lodash_1.default.truncate(`Caveat: ${cleanText(caveat)} --- Description: ${currentVal}`, { length: 1024, omission: '' });
221
+ }
222
+ return currentVal;
223
+ }
224
+ exports.setupDescr = setupDescr;
225
+ function setupSevLabel(control, context) {
226
+ return (context === null || context === void 0 ? void 0 : context.impactMapping.get(control.impact)) || 'INFORMATIONAL';
227
+ }
228
+ exports.setupSevLabel = setupSevLabel;
229
+ function setupSevOriginal(control) {
230
+ return `${control.impact}`;
231
+ }
232
+ exports.setupSevOriginal = setupSevOriginal;
233
+ function createProfileInfo(hdf) {
234
+ const typesArr = [];
235
+ const targets = [
236
+ 'name',
237
+ 'version',
238
+ 'sha256',
239
+ 'title',
240
+ 'maintainer',
241
+ 'summary',
242
+ 'license',
243
+ 'copyright',
244
+ 'copyright_email'
245
+ ];
246
+ hdf === null || hdf === void 0 ? void 0 : hdf.profiles.forEach((layer) => {
247
+ const profileInfos = [];
248
+ targets.forEach((target) => {
249
+ const value = lodash_1.default.get(layer, target);
250
+ if (typeof value === 'string') {
251
+ profileInfos.push({ [target]: value });
252
+ }
253
+ });
254
+ typesArr.push(`Profile/Info/${JSON.stringify(profileInfos).replace(/\//g, '∕')}`);
255
+ });
256
+ return typesArr;
257
+ }
258
+ function createProfileInfoFindingFields(hdf) {
259
+ let typesArr = [];
260
+ hdf.profiles.forEach((profile) => {
261
+ const targets = [
262
+ 'version',
263
+ 'sha256',
264
+ 'maintainer',
265
+ 'summary',
266
+ 'license',
267
+ 'copyright',
268
+ 'copyright_email'
269
+ ];
270
+ targets.forEach((target) => {
271
+ const value = lodash_1.default.get(profile, target);
272
+ if (typeof value === 'string') {
273
+ typesArr.push(`${profile.name}/${target}/${value}`);
274
+ }
275
+ });
276
+ const inputs = [];
277
+ profile.attributes.forEach((input) => {
278
+ if (input.options.value) {
279
+ inputs.push({ [input.name]: input.options.value });
280
+ }
281
+ });
282
+ typesArr.push(`${profile.name}/inputs/${JSON.stringify(inputs).replace(/\//g, '∕')}`);
283
+ });
284
+ typesArr = typesArr.slice(0, 50);
285
+ return typesArr;
286
+ }
287
+ function createSegmentInfo(segment) {
288
+ const typesArr = [];
289
+ const targets = [
290
+ 'code_desc',
291
+ 'exception',
292
+ 'message',
293
+ 'resource',
294
+ 'run_time',
295
+ 'start_time',
296
+ 'skip_message',
297
+ 'status'
298
+ ];
299
+ targets.forEach((target) => {
300
+ const value = lodash_1.default.get(segment, target);
301
+ if (typeof value === 'string' && value) {
302
+ typesArr.push(`Segment/${target}/${value.replace(/\//g, '∕')}`);
303
+ }
304
+ });
305
+ return typesArr;
306
+ }
307
+ function createTagInfo(control) {
308
+ const typesArr = [];
309
+ for (const tag in control.tags) {
310
+ if (control) {
311
+ if (tag === 'nist' && Array.isArray(control.tags.nist)) {
312
+ typesArr.push(`Tags/nist/${control.tags.nist.join(', ')}`);
313
+ }
314
+ else if (tag === 'cci' && Array.isArray(control.tags.cci)) {
315
+ typesArr.push(`Tags/cci/${control.tags.cci.join(', ')}`);
316
+ }
317
+ else if (typeof control.tags[tag] === 'string') {
318
+ typesArr.push(`Tags/${tag.replace(/\//g, '∕')}/${control.tags[tag].replace(/\//g, '∕')}`);
319
+ }
320
+ else if (typeof control.tags[tag] === 'object' &&
321
+ Array.isArray(control.tags[tag])) {
322
+ typesArr.push(`Tags/${tag.replace(/\//g, '∕')}/${control.tags[tag]
323
+ .join(', ')
324
+ .replace(/\//g, '∕')}`);
325
+ }
326
+ }
327
+ }
328
+ return typesArr;
329
+ }
330
+ function createDescriptionInfo(control) {
331
+ var _a;
332
+ const typesArr = [];
333
+ (_a = control.descriptions) === null || _a === void 0 ? void 0 : _a.forEach((description) => {
334
+ var _a;
335
+ typesArr.push(`Descriptions/${description.label.replace(/\//g, '∕')}/${(_a = cleanText(description.data)) === null || _a === void 0 ? void 0 : _a.replace(/\//g, '∕')}`);
336
+ });
337
+ return typesArr;
338
+ }
339
+ function setupFindingType(control, context) {
340
+ const slashSplit = context === null || context === void 0 ? void 0 : context.ioptions.input.split('\\')[(context === null || context === void 0 ? void 0 : context.ioptions.input.split('\\').length) - 1];
341
+ const filename = slashSplit === null || slashSplit === void 0 ? void 0 : slashSplit.split('/')[slashSplit.split('/').length - 1];
342
+ const typesArr = [
343
+ `File/Input/${filename}`,
344
+ `Control/Code/${control.layersOfControl
345
+ .map((layer) => createCode(layer))
346
+ .join('\n\n')
347
+ .replace(/\//g, '∕')}`
348
+ ];
349
+ typesArr.push(...createProfileInfo(context === null || context === void 0 ? void 0 : context.data));
350
+ typesArr.push(...createSegmentInfo(control.result));
351
+ typesArr.push(...createTagInfo(control));
352
+ typesArr.push(...createDescriptionInfo(control));
353
+ return typesArr;
354
+ }
355
+ exports.setupFindingType = setupFindingType;
356
+ function getFixForControl(control) {
357
+ var _a, _b;
358
+ return (((_b = (_a = control.descriptions) === null || _a === void 0 ? void 0 : _a.find((description) => description.label === 'fix')) === null || _b === void 0 ? void 0 : _b.data) ||
359
+ control.tags.fix ||
360
+ 'Fix not available');
361
+ }
362
+ exports.getFixForControl = getFixForControl;
363
+ function setupRemRec(control) {
364
+ return lodash_1.default.truncate(cleanText(`${createNote(control.result)} --- Fix: ${getFixForControl(control)}`), { length: 512, omission: '... [SEE FULL TEXT IN AssumeRolePolicyDocument]' });
365
+ }
366
+ exports.setupRemRec = setupRemRec;
367
+ function setupProdFieldCheck(control) {
368
+ var _a, _b;
369
+ const checktext = ((_b = (_a = control.descriptions) === null || _a === void 0 ? void 0 : _a.find((description) => description.label === 'check')) === null || _b === void 0 ? void 0 : _b.data) ||
370
+ control.tags['check'] ||
371
+ 'Check not available';
372
+ return lodash_1.default.truncate(checktext, { length: 2048, omission: '' });
373
+ }
374
+ exports.setupProdFieldCheck = setupProdFieldCheck;
375
+ function setupResourcesID(_val, context) {
376
+ return `AWS::::Account:${context === null || context === void 0 ? void 0 : context.ioptions.awsAccountId}`;
377
+ }
378
+ exports.setupResourcesID = setupResourcesID;
379
+ function setupResourcesID2(control) {
380
+ return `${control.id} Validation Code`;
381
+ }
382
+ exports.setupResourcesID2 = setupResourcesID2;
383
+ function setupDetailsAssume(control) {
384
+ return createAssumeRolePolicyDocument(control.layersOfControl, control.result);
385
+ }
386
+ exports.setupDetailsAssume = setupDetailsAssume;
387
+ function setupControlStatus(control) {
388
+ const status = control.result.status === 'skipped'
389
+ ? 'WARNING'
390
+ : control.result.status === 'passed';
391
+ if (typeof status === 'boolean') {
392
+ return status ? 'PASSED' : 'FAILED';
393
+ }
394
+ return status;
395
+ }
396
+ exports.setupControlStatus = setupControlStatus;
397
+ //# sourceMappingURL=transformers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transformers.js","sourceRoot":"","sources":["../../../../src/converters-from-hdf/asff/transformers.ts"],"names":[],"mappings":"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"}