@mitre/hdf-converters 2.5.1

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 (89) hide show
  1. package/LICENSE.md +9 -0
  2. package/README.md +4 -0
  3. package/lib/data/U_CCI_List.xml +38403 -0
  4. package/lib/data/aws-config-mapping.csv +107 -0
  5. package/lib/data/cwe-nist-mapping.csv +203 -0
  6. package/lib/data/nessus-plugins-nist-mapping.csv +108 -0
  7. package/lib/data/nikto-nist-mapping.csv +8942 -0
  8. package/lib/data/owasp-nist-mapping.csv +11 -0
  9. package/lib/data/scoutsuite-nist-mapping.csv +140 -0
  10. package/lib/index.d.ts +12 -0
  11. package/lib/index.js +25 -0
  12. package/lib/index.js.map +1 -0
  13. package/lib/package.json +45 -0
  14. package/lib/src/base-converter.d.ts +39 -0
  15. package/lib/src/base-converter.js +216 -0
  16. package/lib/src/base-converter.js.map +1 -0
  17. package/lib/src/burpsuite-mapper.d.ts +7 -0
  18. package/lib/src/burpsuite-mapper.js +157 -0
  19. package/lib/src/burpsuite-mapper.js.map +1 -0
  20. package/lib/src/dbprotect-mapper.d.ts +7 -0
  21. package/lib/src/dbprotect-mapper.js +165 -0
  22. package/lib/src/dbprotect-mapper.js.map +1 -0
  23. package/lib/src/fortify-mapper.d.ts +8 -0
  24. package/lib/src/fortify-mapper.js +180 -0
  25. package/lib/src/fortify-mapper.js.map +1 -0
  26. package/lib/src/jfrog-xray-mapper.d.ts +7 -0
  27. package/lib/src/jfrog-xray-mapper.js +169 -0
  28. package/lib/src/jfrog-xray-mapper.js.map +1 -0
  29. package/lib/src/mappings/CciNistMapping.d.ts +6 -0
  30. package/lib/src/mappings/CciNistMapping.js +60 -0
  31. package/lib/src/mappings/CciNistMapping.js.map +1 -0
  32. package/lib/src/mappings/CciNistMappingItem.d.ts +5 -0
  33. package/lib/src/mappings/CciNistMappingItem.js +11 -0
  34. package/lib/src/mappings/CciNistMappingItem.js.map +1 -0
  35. package/lib/src/mappings/CweNistMapping.d.ts +6 -0
  36. package/lib/src/mappings/CweNistMapping.js +74 -0
  37. package/lib/src/mappings/CweNistMapping.js.map +1 -0
  38. package/lib/src/mappings/CweNistMappingItem.d.ts +8 -0
  39. package/lib/src/mappings/CweNistMappingItem.js +34 -0
  40. package/lib/src/mappings/CweNistMappingItem.js.map +1 -0
  41. package/lib/src/mappings/NessusPluginsNistMapping.d.ts +6 -0
  42. package/lib/src/mappings/NessusPluginsNistMapping.js +48 -0
  43. package/lib/src/mappings/NessusPluginsNistMapping.js.map +1 -0
  44. package/lib/src/mappings/NessusPluginsNistMappingItem.d.ts +7 -0
  45. package/lib/src/mappings/NessusPluginsNistMappingItem.js +23 -0
  46. package/lib/src/mappings/NessusPluginsNistMappingItem.js.map +1 -0
  47. package/lib/src/mappings/NiktoNistMapping.d.ts +6 -0
  48. package/lib/src/mappings/NiktoNistMapping.js +40 -0
  49. package/lib/src/mappings/NiktoNistMapping.js.map +1 -0
  50. package/lib/src/mappings/NiktoNistMappingItem.d.ts +7 -0
  51. package/lib/src/mappings/NiktoNistMappingItem.js +28 -0
  52. package/lib/src/mappings/NiktoNistMappingItem.js.map +1 -0
  53. package/lib/src/mappings/OwaspNistMapping.d.ts +6 -0
  54. package/lib/src/mappings/OwaspNistMapping.js +55 -0
  55. package/lib/src/mappings/OwaspNistMapping.js.map +1 -0
  56. package/lib/src/mappings/OwaspNistMappingItem.d.ts +8 -0
  57. package/lib/src/mappings/OwaspNistMappingItem.js +34 -0
  58. package/lib/src/mappings/OwaspNistMappingItem.js.map +1 -0
  59. package/lib/src/mappings/ScoutsuiteNistMapping.d.ts +6 -0
  60. package/lib/src/mappings/ScoutsuiteNistMapping.js +39 -0
  61. package/lib/src/mappings/ScoutsuiteNistMapping.js.map +1 -0
  62. package/lib/src/mappings/ScoutsuiteNistMappingItem.d.ts +5 -0
  63. package/lib/src/mappings/ScoutsuiteNistMappingItem.js +21 -0
  64. package/lib/src/mappings/ScoutsuiteNistMappingItem.js.map +1 -0
  65. package/lib/src/nessus-mapper.d.ts +13 -0
  66. package/lib/src/nessus-mapper.js +303 -0
  67. package/lib/src/nessus-mapper.js.map +1 -0
  68. package/lib/src/netsparker-mapper.d.ts +7 -0
  69. package/lib/src/netsparker-mapper.js +221 -0
  70. package/lib/src/netsparker-mapper.js.map +1 -0
  71. package/lib/src/nikto-mapper.d.ts +7 -0
  72. package/lib/src/nikto-mapper.js +96 -0
  73. package/lib/src/nikto-mapper.js.map +1 -0
  74. package/lib/src/sarif-mapper.d.ts +7 -0
  75. package/lib/src/sarif-mapper.js +143 -0
  76. package/lib/src/sarif-mapper.js.map +1 -0
  77. package/lib/src/scoutsuite-mapper.d.ts +7 -0
  78. package/lib/src/scoutsuite-mapper.js +258 -0
  79. package/lib/src/scoutsuite-mapper.js.map +1 -0
  80. package/lib/src/snyk-mapper.d.ts +14 -0
  81. package/lib/src/snyk-mapper.js +165 -0
  82. package/lib/src/snyk-mapper.js.map +1 -0
  83. package/lib/src/xccdf-results-mapper.d.ts +6 -0
  84. package/lib/src/xccdf-results-mapper.js +206 -0
  85. package/lib/src/xccdf-results-mapper.js.map +1 -0
  86. package/lib/src/zap-mapper.d.ts +8 -0
  87. package/lib/src/zap-mapper.js +177 -0
  88. package/lib/src/zap-mapper.js.map +1 -0
  89. package/package.json +45 -0
@@ -0,0 +1,206 @@
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.XCCDFResultsMapper = void 0;
7
+ const fast_xml_parser_1 = __importDefault(require("fast-xml-parser"));
8
+ const inspecjs_1 = require("inspecjs");
9
+ const lodash_1 = __importDefault(require("lodash"));
10
+ const path_1 = __importDefault(require("path"));
11
+ const package_json_1 = require("../package.json");
12
+ const base_converter_1 = require("./base-converter");
13
+ const CciNistMapping_1 = require("./mappings/CciNistMapping");
14
+ const IMPACT_MAPPING = new Map([
15
+ ['critical', 0.9],
16
+ ['high', 0.7],
17
+ ['medium', 0.5],
18
+ ['low', 0.3]
19
+ ]);
20
+ const RULE_DESCRIPTION = 'cdf:Rule.cdf:description';
21
+ const CCI_REGEX = /CCI-(\d*)/;
22
+ const CCI_NIST_MAPPING_FILE = path_1.default.resolve(__dirname, '../data/U_CCI_List.xml');
23
+ const CCI_NIST_MAPPING = new CciNistMapping_1.CciNistMapping(CCI_NIST_MAPPING_FILE);
24
+ const DEFAULT_NIST_TAG = ['SA-11', 'RA-5', 'Rev_4'];
25
+ let counter = '';
26
+ function getStatus(file) {
27
+ const match = lodash_1.default.get(file, 'cdf:rule-result').find((element) => lodash_1.default.get(element, 'idref') === counter);
28
+ if (lodash_1.default.get(match, 'cdf:result') === 'pass') {
29
+ return inspecjs_1.ExecJSON.ControlResultStatus.Passed;
30
+ }
31
+ else {
32
+ return inspecjs_1.ExecJSON.ControlResultStatus.Failed;
33
+ }
34
+ }
35
+ function extractCci(input) {
36
+ const output = [];
37
+ input.forEach((element) => {
38
+ if (lodash_1.default.get(element, 'text').match(CCI_REGEX)) {
39
+ output.push(lodash_1.default.get(element, 'text'));
40
+ }
41
+ });
42
+ return output;
43
+ }
44
+ function nistTag(input) {
45
+ const identifiers = extractCci(input);
46
+ return CCI_NIST_MAPPING.nistFilter(identifiers, DEFAULT_NIST_TAG, false);
47
+ }
48
+ function parseXml(xml) {
49
+ const options = {
50
+ attributeNamePrefix: '',
51
+ textNodeName: 'text',
52
+ ignoreAttributes: false
53
+ };
54
+ return fast_xml_parser_1.default.parse(xml, options);
55
+ }
56
+ class XCCDFResultsMapper extends base_converter_1.BaseConverter {
57
+ constructor(scapXml) {
58
+ super(parseXml(scapXml));
59
+ this.mappings = {
60
+ platform: {
61
+ name: 'Heimdall Tools',
62
+ release: package_json_1.version,
63
+ target_id: ''
64
+ },
65
+ version: package_json_1.version,
66
+ statistics: {
67
+ duration: 0
68
+ },
69
+ profiles: [
70
+ {
71
+ name: { path: 'cdf:Benchmark.id' },
72
+ version: { path: 'cdf:Benchmark.style' },
73
+ title: { path: 'cdf:Benchmark.cdf:title' },
74
+ maintainer: { path: 'cdf:Benchmark.cdf:reference.dc:publisher' },
75
+ summary: { path: 'cdf:Benchmark.cdf:description' },
76
+ license: { path: 'cdf:Benchmark.cdf:notice.id' },
77
+ copyright: { path: 'cdf:Benchmark.cdf:metadata.dc:creator' },
78
+ copyright_email: 'disa.stig_spt@mail.mil',
79
+ supports: [],
80
+ attributes: [],
81
+ depends: [],
82
+ groups: [],
83
+ status: 'loaded',
84
+ controls: [
85
+ {
86
+ path: 'cdf:Benchmark.cdf:Group',
87
+ key: 'id',
88
+ id: {
89
+ path: 'cdf:Rule.id',
90
+ transformer: (input) => {
91
+ if (typeof input === 'string') {
92
+ counter = input;
93
+ return input.split('_S')[1].split('r')[0];
94
+ }
95
+ else {
96
+ return '';
97
+ }
98
+ }
99
+ },
100
+ title: { path: 'cdf:Rule.cdf:title' },
101
+ desc: {
102
+ path: RULE_DESCRIPTION,
103
+ transformer: (input) => {
104
+ if (typeof input === 'string') {
105
+ return (0, base_converter_1.parseHtml)(input.split('Satisfies')[0]);
106
+ }
107
+ else {
108
+ return '';
109
+ }
110
+ }
111
+ },
112
+ descriptions: [
113
+ {
114
+ data: {
115
+ path: RULE_DESCRIPTION,
116
+ transformer: (input) => {
117
+ if (typeof input === 'string') {
118
+ return (0, base_converter_1.parseHtml)(input);
119
+ }
120
+ else {
121
+ return '';
122
+ }
123
+ }
124
+ },
125
+ label: 'default'
126
+ },
127
+ {
128
+ data: 'NA',
129
+ label: 'rationale'
130
+ },
131
+ {
132
+ data: {
133
+ path: 'cdf:Rule.cdf:check.cdf:check-content-ref.name',
134
+ transformer: base_converter_1.parseHtml
135
+ },
136
+ label: 'check'
137
+ },
138
+ {
139
+ data: {
140
+ path: 'cdf:Rule.cdf:fixtext.text',
141
+ transformer: base_converter_1.parseHtml
142
+ },
143
+ label: 'fix'
144
+ }
145
+ ],
146
+ impact: {
147
+ path: 'cdf:Rule.severity',
148
+ transformer: (0, base_converter_1.impactMapping)(IMPACT_MAPPING)
149
+ },
150
+ refs: [],
151
+ tags: {
152
+ severity: null,
153
+ gtitle: { path: 'cdf:title' },
154
+ satisfies: {
155
+ path: RULE_DESCRIPTION,
156
+ transformer: (input) => {
157
+ if (input.split('Satisfies: ')[1] !== undefined) {
158
+ return input
159
+ .split('Satisfies: ')[1]
160
+ .split('&lt')[0]
161
+ .replace(/', /gi, ',')
162
+ .split(',');
163
+ }
164
+ else {
165
+ return [];
166
+ }
167
+ }
168
+ },
169
+ gid: {
170
+ path: 'cdf:Rule.id',
171
+ transformer: (input) => {
172
+ return input.split('_').slice(-2, -1)[0].split('r')[0];
173
+ }
174
+ },
175
+ legacy_id: { path: 'cdf:Rule.cdf:ident[2].text' },
176
+ rid: { path: 'cdf:Rule.cdf:ident[1].text' },
177
+ stig_id: { path: '$.cdf:Benchmark.id' },
178
+ fix_id: { path: 'cdf:Rule.cdf:fix.id' },
179
+ cci: { path: 'cdf:Rule.cdf:ident', transformer: extractCci },
180
+ nist: { path: 'cdf:Rule.cdf:ident', transformer: nistTag }
181
+ },
182
+ code: '',
183
+ source_location: {},
184
+ results: [
185
+ {
186
+ status: {
187
+ path: '$.cdf:Benchmark.cdf:TestResult',
188
+ transformer: getStatus
189
+ },
190
+ code_desc: '',
191
+ run_time: 0,
192
+ start_time: { path: '$.cdf:Benchmark.cdf:TestResult.start-time' },
193
+ message: '',
194
+ resource: ''
195
+ }
196
+ ]
197
+ }
198
+ ],
199
+ sha256: ''
200
+ }
201
+ ]
202
+ };
203
+ }
204
+ }
205
+ exports.XCCDFResultsMapper = XCCDFResultsMapper;
206
+ //# sourceMappingURL=xccdf-results-mapper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"xccdf-results-mapper.js","sourceRoot":"","sources":["../../src/xccdf-results-mapper.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import { ExecJSON } from 'inspecjs';
2
+ import { BaseConverter, ILookupPath, MappedTransform } from './base-converter';
3
+ export declare class ZapMapper extends BaseConverter {
4
+ mappings: MappedTransform<ExecJSON.Execution, ILookupPath>;
5
+ constructor(zapJson: string, name: string);
6
+ setMappings(customMappings: MappedTransform<ExecJSON.Execution, ILookupPath>): void;
7
+ toHdf(): ExecJSON.Execution;
8
+ }
@@ -0,0 +1,177 @@
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.ZapMapper = void 0;
7
+ const inspecjs_1 = require("inspecjs");
8
+ const lodash_1 = __importDefault(require("lodash"));
9
+ const path_1 = __importDefault(require("path"));
10
+ const package_json_1 = require("../package.json");
11
+ const base_converter_1 = require("./base-converter");
12
+ const CweNistMapping_1 = require("./mappings/CweNistMapping");
13
+ const CWE_NIST_MAPPING_FILE = path_1.default.resolve(__dirname, '../data/cwe-nist-mapping.csv');
14
+ const CWE_NIST_MAPPING = new CweNistMapping_1.CweNistMapping(CWE_NIST_MAPPING_FILE);
15
+ const DEFAULT_NIST_TAG = ['SA-11', 'RA-5'];
16
+ function filterSite(input, name) {
17
+ return input.find((element) => lodash_1.default.get(element, '@name') === name);
18
+ }
19
+ function impactMapping(input) {
20
+ if (typeof input === 'string') {
21
+ const impact = parseInt(input);
22
+ if (0 <= impact && impact <= 1) {
23
+ return 0.3;
24
+ }
25
+ else if (impact === 2) {
26
+ return 0.5;
27
+ }
28
+ else if (impact >= 3) {
29
+ return 0.7;
30
+ }
31
+ else {
32
+ return 0;
33
+ }
34
+ }
35
+ else {
36
+ return 0;
37
+ }
38
+ }
39
+ function nistTag(cweid) {
40
+ const result = CWE_NIST_MAPPING.nistFilter([cweid], DEFAULT_NIST_TAG);
41
+ if (result === DEFAULT_NIST_TAG) {
42
+ return result;
43
+ }
44
+ else {
45
+ return result.concat('Rev_4');
46
+ }
47
+ }
48
+ function checkText(input) {
49
+ const text = [];
50
+ text.push(lodash_1.default.get(input, 'solution'));
51
+ text.push(lodash_1.default.get(input, 'otherinfo'));
52
+ text.push(lodash_1.default.get(input, 'otherinfo'));
53
+ return text.join('\n');
54
+ }
55
+ function formatCodeDesc(input) {
56
+ const text = [];
57
+ if (input instanceof Object) {
58
+ Object.keys(input).forEach((key) => {
59
+ text.push(`${key.charAt(0).toUpperCase() + key.slice(1)}: ${lodash_1.default.get(input, key)}`);
60
+ });
61
+ }
62
+ return text.join('\n') + '\n';
63
+ }
64
+ function deduplicateId(input) {
65
+ const controlId = input.map((element) => {
66
+ return lodash_1.default.get(element, 'id');
67
+ });
68
+ const dupId = (0, lodash_1.default)(controlId)
69
+ .groupBy()
70
+ .pickBy((value) => value.length > 1)
71
+ .keys()
72
+ .value();
73
+ dupId.forEach((id) => {
74
+ let index = 1;
75
+ input
76
+ .filter((element) => lodash_1.default.get(element, 'id') === id)
77
+ .forEach((element) => {
78
+ if (element instanceof Object) {
79
+ lodash_1.default.set(element, 'id', `${id}.${index.toString()}`);
80
+ }
81
+ index++;
82
+ });
83
+ });
84
+ return input;
85
+ }
86
+ class ZapMapper extends base_converter_1.BaseConverter {
87
+ constructor(zapJson, name) {
88
+ super(lodash_1.default.set(JSON.parse(zapJson), 'site', filterSite(lodash_1.default.get(JSON.parse(zapJson), 'site'), name)), false);
89
+ this.mappings = {
90
+ platform: {
91
+ name: 'Heimdall Tools',
92
+ release: package_json_1.version,
93
+ target_id: ''
94
+ },
95
+ version: package_json_1.version,
96
+ statistics: {
97
+ duration: null
98
+ },
99
+ profiles: [
100
+ {
101
+ name: 'OWASP ZAP Scan',
102
+ version: { path: '@version' },
103
+ title: {
104
+ path: 'site.@host',
105
+ transformer: (input) => {
106
+ return `OWASP ZAP Scan of Host: ${input}`;
107
+ }
108
+ },
109
+ maintainer: null,
110
+ summary: {
111
+ path: 'site.@host',
112
+ transformer: (input) => {
113
+ return `OWASP ZAP Scan of Host: ${input}`;
114
+ }
115
+ },
116
+ license: null,
117
+ copyright: null,
118
+ copyright_email: null,
119
+ supports: [],
120
+ attributes: [],
121
+ depends: [],
122
+ groups: [],
123
+ status: 'loaded',
124
+ controls: [
125
+ {
126
+ path: 'site.alerts',
127
+ arrayTransformer: deduplicateId,
128
+ id: { path: 'pluginid' },
129
+ title: { path: 'name' },
130
+ desc: { path: 'desc', transformer: base_converter_1.parseHtml },
131
+ impact: { path: 'riskcode', transformer: impactMapping },
132
+ tags: {
133
+ nist: { path: 'cweid', transformer: nistTag },
134
+ cweid: { path: 'cweid' },
135
+ wascid: { path: 'wascid' },
136
+ sourceid: { path: 'sourceid' },
137
+ confidence: { path: 'confidence' },
138
+ riskdesc: { path: 'riskdesc' },
139
+ check: { transformer: checkText }
140
+ },
141
+ descriptions: [],
142
+ refs: [],
143
+ source_location: {},
144
+ code: '',
145
+ results: [
146
+ {
147
+ path: 'instances',
148
+ status: inspecjs_1.ExecJSON.ControlResultStatus.Failed,
149
+ code_desc: { transformer: formatCodeDesc },
150
+ run_time: 0,
151
+ start_time: { path: '$.@generated' }
152
+ }
153
+ ]
154
+ }
155
+ ],
156
+ sha256: ''
157
+ }
158
+ ]
159
+ };
160
+ }
161
+ setMappings(customMappings) {
162
+ super.setMappings(customMappings);
163
+ }
164
+ toHdf() {
165
+ const original = super.toHdf();
166
+ lodash_1.default.get(original, 'profiles').forEach((profile) => {
167
+ lodash_1.default.get(profile, 'controls').forEach((control) => {
168
+ lodash_1.default.set(control, 'results', lodash_1.default.get(control, 'results').filter(function (element, index, self) {
169
+ return index === self.indexOf(element);
170
+ }));
171
+ });
172
+ });
173
+ return original;
174
+ }
175
+ }
176
+ exports.ZapMapper = ZapMapper;
177
+ //# sourceMappingURL=zap-mapper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"zap-mapper.js","sourceRoot":"","sources":["../../src/zap-mapper.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,45 @@
1
+ {
2
+ "name": "@mitre/hdf-converters",
3
+ "version": "2.5.1",
4
+ "license": "Apache-2.0",
5
+ "description": "Converter util library used to transform various scan results into HDF format",
6
+ "files": [
7
+ "lib"
8
+ ],
9
+ "main": "lib/index.js",
10
+ "publishConfig": {
11
+ "main": "lib/index.js"
12
+ },
13
+ "scripts": {
14
+ "prepack": "yarn build && cp package.json package.json.orig && cat package.json.orig | jq '.main = (.publishConfig.main)' > package.json",
15
+ "postpack": "mv package.json.orig package.json",
16
+ "build": "tsc -p ./tsconfig.build.json && cp -R ./data ./lib",
17
+ "lint": "eslint \"**/*.ts\" --fix",
18
+ "lint:ci": "eslint \"**/*.ts\" --max-warnings 0",
19
+ "test": "jest --silent"
20
+ },
21
+ "dependencies": {
22
+ "csv-parse": "^4.16.0",
23
+ "fast-xml-parser": "^3.19.0",
24
+ "htmlparser2": "^6.1.0",
25
+ "inspecjs": "^2.5.1",
26
+ "lodash": "^4.17.21"
27
+ },
28
+ "devDependencies": {
29
+ "@types/jest": "^27.0.0",
30
+ "@types/lodash": "^4.14.161",
31
+ "@types/node": "^15.0.1",
32
+ "htmlparser2": "^6.1.0",
33
+ "jest": "^27.0.6",
34
+ "quicktype": "^15.0.260",
35
+ "ts-jest": "^27.0.3",
36
+ "ts-node": "^10.0.0",
37
+ "typedoc": "^0.22.1"
38
+ },
39
+ "jest": {
40
+ "rootDir": ".",
41
+ "transform": {
42
+ "^.+\\.ts$": "ts-jest"
43
+ }
44
+ }
45
+ }