@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.
- package/LICENSE.md +9 -0
- package/README.md +4 -0
- package/lib/data/U_CCI_List.xml +38403 -0
- package/lib/data/aws-config-mapping.csv +107 -0
- package/lib/data/cwe-nist-mapping.csv +203 -0
- package/lib/data/nessus-plugins-nist-mapping.csv +108 -0
- package/lib/data/nikto-nist-mapping.csv +8942 -0
- package/lib/data/owasp-nist-mapping.csv +11 -0
- package/lib/data/scoutsuite-nist-mapping.csv +140 -0
- package/lib/index.d.ts +12 -0
- package/lib/index.js +25 -0
- package/lib/index.js.map +1 -0
- package/lib/package.json +45 -0
- package/lib/src/base-converter.d.ts +39 -0
- package/lib/src/base-converter.js +216 -0
- package/lib/src/base-converter.js.map +1 -0
- package/lib/src/burpsuite-mapper.d.ts +7 -0
- package/lib/src/burpsuite-mapper.js +157 -0
- package/lib/src/burpsuite-mapper.js.map +1 -0
- package/lib/src/dbprotect-mapper.d.ts +7 -0
- package/lib/src/dbprotect-mapper.js +165 -0
- package/lib/src/dbprotect-mapper.js.map +1 -0
- package/lib/src/fortify-mapper.d.ts +8 -0
- package/lib/src/fortify-mapper.js +180 -0
- package/lib/src/fortify-mapper.js.map +1 -0
- package/lib/src/jfrog-xray-mapper.d.ts +7 -0
- package/lib/src/jfrog-xray-mapper.js +169 -0
- package/lib/src/jfrog-xray-mapper.js.map +1 -0
- package/lib/src/mappings/CciNistMapping.d.ts +6 -0
- package/lib/src/mappings/CciNistMapping.js +60 -0
- package/lib/src/mappings/CciNistMapping.js.map +1 -0
- package/lib/src/mappings/CciNistMappingItem.d.ts +5 -0
- package/lib/src/mappings/CciNistMappingItem.js +11 -0
- package/lib/src/mappings/CciNistMappingItem.js.map +1 -0
- package/lib/src/mappings/CweNistMapping.d.ts +6 -0
- package/lib/src/mappings/CweNistMapping.js +74 -0
- package/lib/src/mappings/CweNistMapping.js.map +1 -0
- package/lib/src/mappings/CweNistMappingItem.d.ts +8 -0
- package/lib/src/mappings/CweNistMappingItem.js +34 -0
- package/lib/src/mappings/CweNistMappingItem.js.map +1 -0
- package/lib/src/mappings/NessusPluginsNistMapping.d.ts +6 -0
- package/lib/src/mappings/NessusPluginsNistMapping.js +48 -0
- package/lib/src/mappings/NessusPluginsNistMapping.js.map +1 -0
- package/lib/src/mappings/NessusPluginsNistMappingItem.d.ts +7 -0
- package/lib/src/mappings/NessusPluginsNistMappingItem.js +23 -0
- package/lib/src/mappings/NessusPluginsNistMappingItem.js.map +1 -0
- package/lib/src/mappings/NiktoNistMapping.d.ts +6 -0
- package/lib/src/mappings/NiktoNistMapping.js +40 -0
- package/lib/src/mappings/NiktoNistMapping.js.map +1 -0
- package/lib/src/mappings/NiktoNistMappingItem.d.ts +7 -0
- package/lib/src/mappings/NiktoNistMappingItem.js +28 -0
- package/lib/src/mappings/NiktoNistMappingItem.js.map +1 -0
- package/lib/src/mappings/OwaspNistMapping.d.ts +6 -0
- package/lib/src/mappings/OwaspNistMapping.js +55 -0
- package/lib/src/mappings/OwaspNistMapping.js.map +1 -0
- package/lib/src/mappings/OwaspNistMappingItem.d.ts +8 -0
- package/lib/src/mappings/OwaspNistMappingItem.js +34 -0
- package/lib/src/mappings/OwaspNistMappingItem.js.map +1 -0
- package/lib/src/mappings/ScoutsuiteNistMapping.d.ts +6 -0
- package/lib/src/mappings/ScoutsuiteNistMapping.js +39 -0
- package/lib/src/mappings/ScoutsuiteNistMapping.js.map +1 -0
- package/lib/src/mappings/ScoutsuiteNistMappingItem.d.ts +5 -0
- package/lib/src/mappings/ScoutsuiteNistMappingItem.js +21 -0
- package/lib/src/mappings/ScoutsuiteNistMappingItem.js.map +1 -0
- package/lib/src/nessus-mapper.d.ts +13 -0
- package/lib/src/nessus-mapper.js +303 -0
- package/lib/src/nessus-mapper.js.map +1 -0
- package/lib/src/netsparker-mapper.d.ts +7 -0
- package/lib/src/netsparker-mapper.js +221 -0
- package/lib/src/netsparker-mapper.js.map +1 -0
- package/lib/src/nikto-mapper.d.ts +7 -0
- package/lib/src/nikto-mapper.js +96 -0
- package/lib/src/nikto-mapper.js.map +1 -0
- package/lib/src/sarif-mapper.d.ts +7 -0
- package/lib/src/sarif-mapper.js +143 -0
- package/lib/src/sarif-mapper.js.map +1 -0
- package/lib/src/scoutsuite-mapper.d.ts +7 -0
- package/lib/src/scoutsuite-mapper.js +258 -0
- package/lib/src/scoutsuite-mapper.js.map +1 -0
- package/lib/src/snyk-mapper.d.ts +14 -0
- package/lib/src/snyk-mapper.js +165 -0
- package/lib/src/snyk-mapper.js.map +1 -0
- package/lib/src/xccdf-results-mapper.d.ts +6 -0
- package/lib/src/xccdf-results-mapper.js +206 -0
- package/lib/src/xccdf-results-mapper.js.map +1 -0
- package/lib/src/zap-mapper.d.ts +8 -0
- package/lib/src/zap-mapper.js +177 -0
- package/lib/src/zap-mapper.js.map +1 -0
- package/package.json +45 -0
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
OWASP-ID,OWASP Name,NIST-ID,Rev,NIST Name
|
|
2
|
+
A1,Injection,SI-10,4,Information Input Validation
|
|
3
|
+
A2,Broken Authentication,SC-23,4,Session Authenticity
|
|
4
|
+
A3,Sensitive Data Exposure,SI-11,4,Error Handling
|
|
5
|
+
A4,XML External Entities (XXE),SI-10,4,Information Input Validation
|
|
6
|
+
A5,Broken Access Control,AC-3,4,Access Enforcement
|
|
7
|
+
A6,Security Misconfiguration,CM-6,4,Configuration Settings
|
|
8
|
+
A7,Cross-Site Scripting (XSS),SI-10,4,Information Input Validation
|
|
9
|
+
A8,Insecure Deserialization,SC-23,4,Session Authenticity
|
|
10
|
+
A9,Using Components with Known Vulnerabilities,SI-2,4,Flaw Remediation
|
|
11
|
+
A10,Insufficient Logging&Monitoring,AU-12,4,Audit Generation
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
rule,nistid
|
|
2
|
+
acm-certificate-with-close-expiration-date,SC-12
|
|
3
|
+
acm-certificate-with-transparency-logging-disabled,SC-12
|
|
4
|
+
cloudformation-stack-with-role,AC-6
|
|
5
|
+
cloudtrail-duplicated-global-services-logging,AU-6
|
|
6
|
+
cloudtrail-no-cloudwatch-integration,AU-12|SI-4(2)
|
|
7
|
+
cloudtrail-no-data-logging,AU-12
|
|
8
|
+
cloudtrail-no-encryption-with-kms,AU-6
|
|
9
|
+
cloudtrail-no-global-services-logging,AU-12
|
|
10
|
+
cloudtrail-no-log-file-validation,AU-6
|
|
11
|
+
cloudtrail-no-logging,AU-12
|
|
12
|
+
cloudtrail-not-configured,AU-12
|
|
13
|
+
cloudwatch-alarm-without-actions,AU-12
|
|
14
|
+
config-recorder-not-configured,CM-8|CM-8(2)|CM-8(6)
|
|
15
|
+
ec2-ami-public,AC-3
|
|
16
|
+
ec2-default-security-group-in-use,AC-3(3)
|
|
17
|
+
ec2-default-security-group-with-rules,AC-3(3)
|
|
18
|
+
ec2-ebs-snapshot-not-encrypted,SC-28
|
|
19
|
+
ec2-ebs-snapshot-public,AC-3
|
|
20
|
+
ec2-ebs-volume-not-encrypted,SC-28
|
|
21
|
+
ec2-instance-in-security-group,CM-7(1)
|
|
22
|
+
ec2-instance-type,CM-2
|
|
23
|
+
ec2-instance-types,CM-2
|
|
24
|
+
ec2-instance-with-public-ip,AC-3
|
|
25
|
+
ec2-instance-with-user-data-secrets,AC-3
|
|
26
|
+
ec2-security-group-opens-all-ports,CM-7(1)
|
|
27
|
+
ec2-security-group-opens-all-ports-to-all,CM-7(1)
|
|
28
|
+
ec2-security-group-opens-all-ports-to-self,CM-7(1)
|
|
29
|
+
ec2-security-group-opens-icmp-to-all,CM-7(1)
|
|
30
|
+
ec2-security-group-opens-known-port-to-all,CM-7(1)
|
|
31
|
+
ec2-security-group-opens-plaintext-port,CM-7(1)
|
|
32
|
+
ec2-security-group-opens-port-range,CM-7(1)
|
|
33
|
+
ec2-security-group-opens-port-to-all,CM-7(1)
|
|
34
|
+
ec2-security-group-whitelists-aws,CM-7(1)
|
|
35
|
+
ec2-security-group-whitelists-aws-ip-from-banned-region,CM-7(1)
|
|
36
|
+
ec2-security-group-whitelists-non-elastic-ips,CM-7(1)
|
|
37
|
+
ec2-security-group-whitelists-unknown-aws,CM-7(1)
|
|
38
|
+
ec2-security-group-whitelists-unknown-cidrs,CM-7(1)
|
|
39
|
+
ec2-unused-security-group,CM-7(1)
|
|
40
|
+
elb-listener-allowing-cleartext,SC-8
|
|
41
|
+
elb-no-access-logs,AU-12
|
|
42
|
+
elb-older-ssl-policy,SC-8
|
|
43
|
+
elbv2-http-request-smuggling,SC-8
|
|
44
|
+
elbv2-listener-allowing-cleartext,SC-8
|
|
45
|
+
elbv2-no-access-logs,AU-12
|
|
46
|
+
elbv2-no-deletion-protection,SI-7
|
|
47
|
+
elbv2-older-ssl-policy,SC-8
|
|
48
|
+
iam-assume-role-lacks-external-id-and-mfa,AC-17
|
|
49
|
+
iam-assume-role-no-mfa,AC-6
|
|
50
|
+
iam-assume-role-policy-allows-all,AC-6
|
|
51
|
+
iam-ec2-role-without-instances,AC-6
|
|
52
|
+
iam-group-with-inline-policies,AC-6
|
|
53
|
+
iam-group-with-no-users,AC-6
|
|
54
|
+
iam-human-user-with-policies,AC-6
|
|
55
|
+
iam-inline-policy-allows-non-sts-action,AC-6
|
|
56
|
+
iam-inline-policy-allows-NotActions,AC-6
|
|
57
|
+
iam-inline-policy-for-role,AC-6
|
|
58
|
+
iam-managed-policy-allows-full-privileges,AC-6
|
|
59
|
+
iam-managed-policy-allows-non-sts-action,AC-6
|
|
60
|
+
iam-managed-policy-allows-NotActions,AC-6
|
|
61
|
+
iam-managed-policy-for-role,AC-6
|
|
62
|
+
iam-managed-policy-no-attachments,AC-6
|
|
63
|
+
iam-no-support-role,IR-7
|
|
64
|
+
iam-password-policy-expiration-threshold,AC-2
|
|
65
|
+
iam-password-policy-minimum-length,AC-2
|
|
66
|
+
iam-password-policy-no-expiration,AC-2
|
|
67
|
+
iam-password-policy-no-lowercase-required,AC-2
|
|
68
|
+
iam-password-policy-no-number-required,AC-2
|
|
69
|
+
iam-password-policy-no-symbol-required,AC-2
|
|
70
|
+
iam-password-policy-no-uppercase-required,AC-2
|
|
71
|
+
iam-password-policy-reuse-enabled,IA-5(1)
|
|
72
|
+
iam-role-with-inline-policies,AC-6
|
|
73
|
+
iam-root-account-no-hardware-mfa,IA-2(1)
|
|
74
|
+
iam-root-account-no-mfa,IA-2(1)
|
|
75
|
+
iam-root-account-used-recently,AC-6(9)
|
|
76
|
+
iam-root-account-with-active-certs,AC-6(9)
|
|
77
|
+
iam-root-account-with-active-keys,AC-6(9)
|
|
78
|
+
iam-service-user-with-password,AC-2
|
|
79
|
+
iam-unused-credentials-not-disabled,AC-2
|
|
80
|
+
iam-user-no-key-rotation,AC-2
|
|
81
|
+
iam-user-not-in-category-group,AC-2
|
|
82
|
+
iam-user-not-in-common-group,AC-2
|
|
83
|
+
iam-user-unused-access-key-initial-setup,AC-2
|
|
84
|
+
iam-user-with-multiple-access-keys,IA-2
|
|
85
|
+
iam-user-without-mfa,IA-2(1)
|
|
86
|
+
iam-user-with-password-and-key,IA-2
|
|
87
|
+
iam-user-with-policies,AC-2
|
|
88
|
+
kms-cmk-rotation-disabled,SC-12
|
|
89
|
+
logs-no-alarm-aws-configuration-changes,CM-8|CM-8(2)|CM-8(6)
|
|
90
|
+
logs-no-alarm-cloudtrail-configuration-changes,AU-6
|
|
91
|
+
logs-no-alarm-cmk-deletion,AC-2
|
|
92
|
+
logs-no-alarm-console-authentication-failures,AC-2
|
|
93
|
+
logs-no-alarm-iam-policy-changes,AC-2
|
|
94
|
+
logs-no-alarm-nacl-changes,CM-6(2)
|
|
95
|
+
logs-no-alarm-network-gateways-changes,AU-12|CM-6(2)
|
|
96
|
+
logs-no-alarm-root-usage,AU-2
|
|
97
|
+
logs-no-alarm-route-table-changes,AU-12|CM-6(2)
|
|
98
|
+
logs-no-alarm-s3-policy-changes,AC-6|AU-12
|
|
99
|
+
logs-no-alarm-security-group-changes,AC-2(4)
|
|
100
|
+
logs-no-alarm-signin-without-mfa,AC-2
|
|
101
|
+
logs-no-alarm-unauthorized-api-calls,AU-6|SI-4(2)
|
|
102
|
+
logs-no-alarm-vpc-changes,CM-6(1)
|
|
103
|
+
rds-instance-backup-disabled,CP-9
|
|
104
|
+
rds-instance-ca-certificate-deprecated,SC-12
|
|
105
|
+
rds-instance-no-minor-upgrade,SI-2
|
|
106
|
+
rds-instance-short-backup-retention-period,CP-9
|
|
107
|
+
rds-instance-single-az,CP-7
|
|
108
|
+
rds-instance-storage-not-encrypted,SC-28
|
|
109
|
+
rds-postgres-instance-with-invalid-certificate,SC-12
|
|
110
|
+
rds-security-group-allows-all,CM-7(1)
|
|
111
|
+
rds-snapshot-public,SC-28
|
|
112
|
+
redshift-cluster-database-not-encrypted,SC-28
|
|
113
|
+
redshift-cluster-no-version-upgrade,SI-2
|
|
114
|
+
redshift-cluster-publicly-accessible,AC-3
|
|
115
|
+
redshift-parameter-group-logging-disabled,AU-12
|
|
116
|
+
redshift-parameter-group-ssl-not-required,SC-8
|
|
117
|
+
redshift-security-group-whitelists-all,CM-7(1)
|
|
118
|
+
route53-domain-no-autorenew,SC-2
|
|
119
|
+
route53-domain-no-transferlock,SC-2
|
|
120
|
+
route53-domain-transferlock-not-authorized,SC-2
|
|
121
|
+
s3-bucket-allowing-cleartext,SC-28
|
|
122
|
+
s3-bucket-no-default-encryption,SC-28
|
|
123
|
+
s3-bucket-no-logging,AU-2|AU-12
|
|
124
|
+
s3-bucket-no-mfa-delete,SI-7
|
|
125
|
+
s3-bucket-no-versioning,SI-7
|
|
126
|
+
s3-bucket-world-acl,AC-3(3)
|
|
127
|
+
s3-bucket-world-policy-arg,AC-3(3)
|
|
128
|
+
s3-bucket-world-policy-star,AC-3(3)
|
|
129
|
+
ses-identity-dkim-not-enabled,SC-23
|
|
130
|
+
ses-identity-dkim-not-verified,SC-23
|
|
131
|
+
ses-identity-world-policy,AC-6
|
|
132
|
+
sns-topic-world-policy,AC-6
|
|
133
|
+
sqs-queue-world-policy,AC-6
|
|
134
|
+
vpc-custom-network-acls-allow-all,SC-7
|
|
135
|
+
vpc-default-network-acls-allow-all,SC-7
|
|
136
|
+
vpc-network-acl-not-used,SC-7
|
|
137
|
+
vpc-routing-tables-with-peering,AC-3(3)
|
|
138
|
+
vpc-subnet-with-bad-acls,SC-7
|
|
139
|
+
vpc-subnet-with-default-acls,SC-7
|
|
140
|
+
vpc-subnet-without-flow-log,AU-12
|
package/lib/index.d.ts
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export * from './src/burpsuite-mapper';
|
|
2
|
+
export * from './src/dbprotect-mapper';
|
|
3
|
+
export * from './src/fortify-mapper';
|
|
4
|
+
export * from './src/jfrog-xray-mapper';
|
|
5
|
+
export * from './src/nessus-mapper';
|
|
6
|
+
export * from './src/netsparker-mapper';
|
|
7
|
+
export * from './src/nikto-mapper';
|
|
8
|
+
export * from './src/sarif-mapper';
|
|
9
|
+
export * from './src/scoutsuite-mapper';
|
|
10
|
+
export * from './src/snyk-mapper';
|
|
11
|
+
export * from './src/xccdf-results-mapper';
|
|
12
|
+
export * from './src/zap-mapper';
|
package/lib/index.js
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
|
|
5
|
+
}) : (function(o, m, k, k2) {
|
|
6
|
+
if (k2 === undefined) k2 = k;
|
|
7
|
+
o[k2] = m[k];
|
|
8
|
+
}));
|
|
9
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
10
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
11
|
+
};
|
|
12
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
+
__exportStar(require("./src/burpsuite-mapper"), exports);
|
|
14
|
+
__exportStar(require("./src/dbprotect-mapper"), exports);
|
|
15
|
+
__exportStar(require("./src/fortify-mapper"), exports);
|
|
16
|
+
__exportStar(require("./src/jfrog-xray-mapper"), exports);
|
|
17
|
+
__exportStar(require("./src/nessus-mapper"), exports);
|
|
18
|
+
__exportStar(require("./src/netsparker-mapper"), exports);
|
|
19
|
+
__exportStar(require("./src/nikto-mapper"), exports);
|
|
20
|
+
__exportStar(require("./src/sarif-mapper"), exports);
|
|
21
|
+
__exportStar(require("./src/scoutsuite-mapper"), exports);
|
|
22
|
+
__exportStar(require("./src/snyk-mapper"), exports);
|
|
23
|
+
__exportStar(require("./src/xccdf-results-mapper"), exports);
|
|
24
|
+
__exportStar(require("./src/zap-mapper"), exports);
|
|
25
|
+
//# sourceMappingURL=index.js.map
|
package/lib/index.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,yDAAuC;AACvC,yDAAuC;AACvC,uDAAqC;AACrC,0DAAwC;AACxC,sDAAoC;AACpC,0DAAwC;AACxC,qDAAmC;AACnC,qDAAmC;AACnC,0DAAwC;AACxC,oDAAkC;AAClC,6DAA2C;AAC3C,mDAAiC"}
|
package/lib/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": "src/index.ts",
|
|
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
|
+
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { ExecJSON } from 'inspecjs';
|
|
2
|
+
export interface ILookupPath {
|
|
3
|
+
path?: string;
|
|
4
|
+
transformer?: (value: unknown) => unknown;
|
|
5
|
+
arrayTransformer?: (value: unknown[], file: unknown) => unknown[];
|
|
6
|
+
key?: string;
|
|
7
|
+
}
|
|
8
|
+
export declare type ObjectEntries<T> = {
|
|
9
|
+
[K in keyof T]: readonly [K, T[K]];
|
|
10
|
+
}[keyof T];
|
|
11
|
+
export declare type MappedTransform<T, U extends ILookupPath> = {
|
|
12
|
+
[K in keyof T]: Exclude<T[K], undefined | null> extends Array<any> ? MappedTransform<T[K], U> : T[K] extends Function ? T[K] : T[K] extends object ? MappedTransform<T[K] & (U & {
|
|
13
|
+
arrayTransformer?: (value: unknown[], file: Record<string, unknown>) => T[K][];
|
|
14
|
+
}), U> : T[K] | (U & {
|
|
15
|
+
transformer?: (value: unknown) => T[K];
|
|
16
|
+
});
|
|
17
|
+
};
|
|
18
|
+
export declare type MappedReform<T, U> = {
|
|
19
|
+
[K in keyof T]: Exclude<T[K], undefined | null> extends Array<any> ? MappedReform<T[K], U> : T[K] extends object ? MappedReform<T[K] & U, U> : Exclude<T[K], U>;
|
|
20
|
+
};
|
|
21
|
+
export declare function generateHash(data: string, algorithm?: string): string;
|
|
22
|
+
export declare function parseHtml(input: unknown): string;
|
|
23
|
+
export declare function impactMapping(mapping: Map<string, number>): (severity: unknown) => number;
|
|
24
|
+
export declare class BaseConverter {
|
|
25
|
+
data: Record<string, unknown>;
|
|
26
|
+
mappings?: MappedTransform<ExecJSON.Execution, ILookupPath>;
|
|
27
|
+
collapseResults: boolean;
|
|
28
|
+
constructor(data: Record<string, unknown>, collapseResults?: boolean);
|
|
29
|
+
setMappings(mappings: MappedTransform<ExecJSON.Execution, ILookupPath>): void;
|
|
30
|
+
toHdf(): ExecJSON.Execution;
|
|
31
|
+
objectMap<T, V>(obj: T, fn: (v: ObjectEntries<T>) => V): {
|
|
32
|
+
[K in keyof T]: V;
|
|
33
|
+
};
|
|
34
|
+
convertInternal<T>(file: Record<string, unknown>, fields: T): MappedReform<T, ILookupPath>;
|
|
35
|
+
evaluate<T extends object>(file: Record<string, unknown>, v: Array<T> | T): T | Array<T> | MappedReform<T, ILookupPath>;
|
|
36
|
+
handleArray<T extends object>(file: Record<string, unknown>, v: Array<T & ILookupPath>): Array<T>;
|
|
37
|
+
handlePath(file: Record<string, unknown>, path: string): unknown;
|
|
38
|
+
hasPath(file: Record<string, unknown>, path: string): boolean;
|
|
39
|
+
}
|
|
@@ -0,0 +1,216 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
|
|
5
|
+
}) : (function(o, m, k, k2) {
|
|
6
|
+
if (k2 === undefined) k2 = k;
|
|
7
|
+
o[k2] = m[k];
|
|
8
|
+
}));
|
|
9
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
10
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
11
|
+
}) : function(o, v) {
|
|
12
|
+
o["default"] = v;
|
|
13
|
+
});
|
|
14
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
15
|
+
if (mod && mod.__esModule) return mod;
|
|
16
|
+
var result = {};
|
|
17
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
18
|
+
__setModuleDefault(result, mod);
|
|
19
|
+
return result;
|
|
20
|
+
};
|
|
21
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
22
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
23
|
+
};
|
|
24
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
25
|
+
exports.BaseConverter = exports.impactMapping = exports.parseHtml = exports.generateHash = void 0;
|
|
26
|
+
const crypto_1 = require("crypto");
|
|
27
|
+
const htmlparser = __importStar(require("htmlparser2"));
|
|
28
|
+
const lodash_1 = __importDefault(require("lodash"));
|
|
29
|
+
function generateHash(data, algorithm = 'sha256') {
|
|
30
|
+
const hash = (0, crypto_1.createHash)(algorithm);
|
|
31
|
+
return hash.update(data).digest('hex');
|
|
32
|
+
}
|
|
33
|
+
exports.generateHash = generateHash;
|
|
34
|
+
function parseHtml(input) {
|
|
35
|
+
const textData = [];
|
|
36
|
+
const myParser = new htmlparser.Parser({
|
|
37
|
+
ontext(text) {
|
|
38
|
+
textData.push(text);
|
|
39
|
+
}
|
|
40
|
+
});
|
|
41
|
+
if (typeof input === 'string') {
|
|
42
|
+
myParser.write(input);
|
|
43
|
+
}
|
|
44
|
+
return textData.join('');
|
|
45
|
+
}
|
|
46
|
+
exports.parseHtml = parseHtml;
|
|
47
|
+
function impactMapping(mapping) {
|
|
48
|
+
return (severity) => {
|
|
49
|
+
if (typeof severity === 'string' || typeof severity === 'number') {
|
|
50
|
+
return mapping.get(severity.toString().toLowerCase()) || 0;
|
|
51
|
+
}
|
|
52
|
+
else {
|
|
53
|
+
return 0;
|
|
54
|
+
}
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
exports.impactMapping = impactMapping;
|
|
58
|
+
function collapseDuplicates(array, key, collapseResults) {
|
|
59
|
+
const seen = new Map();
|
|
60
|
+
const newArray = [];
|
|
61
|
+
let counter = 0;
|
|
62
|
+
array.forEach((item) => {
|
|
63
|
+
const propertyValue = lodash_1.default.get(item, key);
|
|
64
|
+
if (typeof propertyValue === 'string') {
|
|
65
|
+
const index = seen.get(propertyValue) || 0;
|
|
66
|
+
if (!seen.has(propertyValue)) {
|
|
67
|
+
newArray.push(item);
|
|
68
|
+
seen.set(propertyValue, counter);
|
|
69
|
+
counter++;
|
|
70
|
+
}
|
|
71
|
+
else {
|
|
72
|
+
const oldResult = lodash_1.default.get(newArray[index], 'results');
|
|
73
|
+
const descriptions = oldResult.map((element) => lodash_1.default.get(element, 'code_desc'));
|
|
74
|
+
if (collapseResults) {
|
|
75
|
+
if (descriptions.indexOf(lodash_1.default.get(item, 'results[0].code_desc')) === -1) {
|
|
76
|
+
lodash_1.default.set(newArray[index], 'results', oldResult.concat(lodash_1.default.get(item, 'results')));
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
else {
|
|
80
|
+
lodash_1.default.set(newArray[index], 'results', oldResult.concat(lodash_1.default.get(item, 'results')));
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
});
|
|
85
|
+
return newArray;
|
|
86
|
+
}
|
|
87
|
+
class BaseConverter {
|
|
88
|
+
constructor(data, collapseResults = false) {
|
|
89
|
+
this.data = data;
|
|
90
|
+
this.collapseResults = collapseResults;
|
|
91
|
+
}
|
|
92
|
+
setMappings(mappings) {
|
|
93
|
+
this.mappings = mappings;
|
|
94
|
+
}
|
|
95
|
+
toHdf() {
|
|
96
|
+
if (this.mappings === undefined) {
|
|
97
|
+
throw new Error('Mappings must be provided');
|
|
98
|
+
}
|
|
99
|
+
else {
|
|
100
|
+
const v = this.convertInternal(this.data, this.mappings);
|
|
101
|
+
v.profiles.forEach((element) => {
|
|
102
|
+
element.sha256 = generateHash(JSON.stringify(element));
|
|
103
|
+
});
|
|
104
|
+
return v;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
objectMap(obj, fn) {
|
|
108
|
+
return Object.fromEntries(Object.entries(obj).map(([k, v]) => [k, fn(v)]));
|
|
109
|
+
}
|
|
110
|
+
convertInternal(file, fields) {
|
|
111
|
+
const result = this.objectMap(fields, (v) => this.evaluate(file, v));
|
|
112
|
+
return result;
|
|
113
|
+
}
|
|
114
|
+
evaluate(file, v) {
|
|
115
|
+
const transformer = lodash_1.default.get(v, 'transformer');
|
|
116
|
+
if (Array.isArray(v)) {
|
|
117
|
+
return this.handleArray(file, v);
|
|
118
|
+
}
|
|
119
|
+
else if (typeof v === 'string' ||
|
|
120
|
+
typeof v === 'number' ||
|
|
121
|
+
typeof v === 'boolean' ||
|
|
122
|
+
v === null) {
|
|
123
|
+
return v;
|
|
124
|
+
}
|
|
125
|
+
else if (lodash_1.default.has(v, 'path')) {
|
|
126
|
+
if (typeof transformer === 'function') {
|
|
127
|
+
return transformer(this.handlePath(file, lodash_1.default.get(v, 'path')));
|
|
128
|
+
}
|
|
129
|
+
const pathVal = this.handlePath(file, lodash_1.default.get(v, 'path'));
|
|
130
|
+
if (Array.isArray(pathVal)) {
|
|
131
|
+
return pathVal;
|
|
132
|
+
}
|
|
133
|
+
return pathVal;
|
|
134
|
+
}
|
|
135
|
+
if (typeof transformer === 'function') {
|
|
136
|
+
return transformer(file);
|
|
137
|
+
}
|
|
138
|
+
else {
|
|
139
|
+
return this.convertInternal(file, v);
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
handleArray(file, v) {
|
|
143
|
+
if (v.length === 0) {
|
|
144
|
+
return [];
|
|
145
|
+
}
|
|
146
|
+
if (v[0].path === undefined) {
|
|
147
|
+
const arrayTransformer = v[0].arrayTransformer;
|
|
148
|
+
v = v.map((element) => {
|
|
149
|
+
return lodash_1.default.omit(element, ['arrayTransformer']);
|
|
150
|
+
});
|
|
151
|
+
let output = [];
|
|
152
|
+
v.forEach((element) => {
|
|
153
|
+
output.push(this.evaluate(file, element));
|
|
154
|
+
});
|
|
155
|
+
if (arrayTransformer !== undefined) {
|
|
156
|
+
output = arrayTransformer(output, this.data);
|
|
157
|
+
}
|
|
158
|
+
return output;
|
|
159
|
+
}
|
|
160
|
+
else {
|
|
161
|
+
const path = v[0].path;
|
|
162
|
+
const key = v[0].key;
|
|
163
|
+
const arrayTransformer = v[0].arrayTransformer;
|
|
164
|
+
const transformer = v[0].transformer;
|
|
165
|
+
if (this.hasPath(file, path)) {
|
|
166
|
+
const pathVal = this.handlePath(file, path);
|
|
167
|
+
if (Array.isArray(pathVal)) {
|
|
168
|
+
v = pathVal.map((element) => {
|
|
169
|
+
return lodash_1.default.omit(this.convertInternal(element, v[0]), [
|
|
170
|
+
'path',
|
|
171
|
+
'transformer',
|
|
172
|
+
'arrayTransformer',
|
|
173
|
+
'key'
|
|
174
|
+
]);
|
|
175
|
+
});
|
|
176
|
+
if (key !== undefined) {
|
|
177
|
+
v = collapseDuplicates(v, key, this.collapseResults);
|
|
178
|
+
}
|
|
179
|
+
if (arrayTransformer !== undefined) {
|
|
180
|
+
v = arrayTransformer(v, this.data);
|
|
181
|
+
}
|
|
182
|
+
return v;
|
|
183
|
+
}
|
|
184
|
+
else {
|
|
185
|
+
if (transformer !== undefined) {
|
|
186
|
+
return [transformer(this.handlePath(file, path))];
|
|
187
|
+
}
|
|
188
|
+
else {
|
|
189
|
+
return [this.handlePath(file, path)];
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
else {
|
|
194
|
+
return [];
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
handlePath(file, path) {
|
|
199
|
+
if (path.startsWith('$.')) {
|
|
200
|
+
return lodash_1.default.get(this.data, path.slice(2)) || '';
|
|
201
|
+
}
|
|
202
|
+
else {
|
|
203
|
+
return lodash_1.default.get(file, path) || '';
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
hasPath(file, path) {
|
|
207
|
+
if (path.startsWith('$.')) {
|
|
208
|
+
return lodash_1.default.has(this.data, path.slice(2));
|
|
209
|
+
}
|
|
210
|
+
else {
|
|
211
|
+
return lodash_1.default.has(file, path);
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
exports.BaseConverter = BaseConverter;
|
|
216
|
+
//# sourceMappingURL=base-converter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base-converter.js","sourceRoot":"","sources":["../../src/base-converter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { ExecJSON } from 'inspecjs';
|
|
2
|
+
import { BaseConverter, ILookupPath, MappedTransform } from './base-converter';
|
|
3
|
+
export declare class BurpSuiteMapper extends BaseConverter {
|
|
4
|
+
mappings: MappedTransform<ExecJSON.Execution, ILookupPath>;
|
|
5
|
+
constructor(burpsXml: string);
|
|
6
|
+
setMappings(customMappings: MappedTransform<ExecJSON.Execution, ILookupPath>): void;
|
|
7
|
+
}
|
|
@@ -0,0 +1,157 @@
|
|
|
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.BurpSuiteMapper = 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 CweNistMapping_1 = require("./mappings/CweNistMapping");
|
|
14
|
+
const IMPACT_MAPPING = new Map([
|
|
15
|
+
['high', 0.7],
|
|
16
|
+
['medium', 0.5],
|
|
17
|
+
['low', 0.3],
|
|
18
|
+
['information', 0.3]
|
|
19
|
+
]);
|
|
20
|
+
const NAME = 'BurpSuite Pro Scan';
|
|
21
|
+
const CWE_NIST_MAPPING_FILE = path_1.default.resolve(__dirname, '../data/cwe-nist-mapping.csv');
|
|
22
|
+
const CWE_NIST_MAPPING = new CweNistMapping_1.CweNistMapping(CWE_NIST_MAPPING_FILE);
|
|
23
|
+
const DEFAULT_NIST_TAG = ['SA-11', 'RA-5'];
|
|
24
|
+
function formatCodeDesc(issue) {
|
|
25
|
+
const text = [];
|
|
26
|
+
if (lodash_1.default.has(issue, 'host.ip') && lodash_1.default.has(issue, 'host.text')) {
|
|
27
|
+
text.push(`Host: ip: ${lodash_1.default.get(issue, 'host.ip')}, url: ${lodash_1.default.get(issue, 'host.text')}`);
|
|
28
|
+
}
|
|
29
|
+
else {
|
|
30
|
+
text.push('Host: ip: , url: ');
|
|
31
|
+
}
|
|
32
|
+
if (lodash_1.default.has(issue, 'location')) {
|
|
33
|
+
text.push(`Location: ${(0, base_converter_1.parseHtml)(lodash_1.default.get(issue, 'location'))}`);
|
|
34
|
+
}
|
|
35
|
+
else {
|
|
36
|
+
text.push('Location: ');
|
|
37
|
+
}
|
|
38
|
+
if (lodash_1.default.has(issue, 'issueDetail')) {
|
|
39
|
+
text.push(`issueDetail: ${(0, base_converter_1.parseHtml)(lodash_1.default.get(issue, 'issueDetail'))}`);
|
|
40
|
+
}
|
|
41
|
+
if (lodash_1.default.has(issue, 'confidence')) {
|
|
42
|
+
text.push(`confidence: ${(0, base_converter_1.parseHtml)(lodash_1.default.get(issue, 'confidence'))}`);
|
|
43
|
+
}
|
|
44
|
+
else {
|
|
45
|
+
text.push('confidence: ');
|
|
46
|
+
}
|
|
47
|
+
return text.join('\n') + '\n';
|
|
48
|
+
}
|
|
49
|
+
function idToString(id) {
|
|
50
|
+
if (typeof id === 'string' || typeof id === 'number') {
|
|
51
|
+
return id.toString();
|
|
52
|
+
}
|
|
53
|
+
else {
|
|
54
|
+
return '';
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
function formatCweId(input) {
|
|
58
|
+
return (0, base_converter_1.parseHtml)(input).slice(1, -1).trimLeft();
|
|
59
|
+
}
|
|
60
|
+
function nistTag(input) {
|
|
61
|
+
let cwe = formatCweId(input).split('CWE-');
|
|
62
|
+
cwe.shift();
|
|
63
|
+
cwe = cwe.map((x) => x.split(':')[0]);
|
|
64
|
+
return CWE_NIST_MAPPING.nistFilter(cwe, DEFAULT_NIST_TAG).concat(['Rev_4']);
|
|
65
|
+
}
|
|
66
|
+
function parseXml(xml) {
|
|
67
|
+
const options = {
|
|
68
|
+
attributeNamePrefix: '',
|
|
69
|
+
textNodeName: 'text',
|
|
70
|
+
ignoreAttributes: false
|
|
71
|
+
};
|
|
72
|
+
return fast_xml_parser_1.default.parse(xml, options);
|
|
73
|
+
}
|
|
74
|
+
class BurpSuiteMapper extends base_converter_1.BaseConverter {
|
|
75
|
+
constructor(burpsXml) {
|
|
76
|
+
super(parseXml(burpsXml));
|
|
77
|
+
this.mappings = {
|
|
78
|
+
platform: {
|
|
79
|
+
name: 'Heimdall Tools',
|
|
80
|
+
release: package_json_1.version,
|
|
81
|
+
target_id: ''
|
|
82
|
+
},
|
|
83
|
+
version: package_json_1.version,
|
|
84
|
+
statistics: {
|
|
85
|
+
duration: null
|
|
86
|
+
},
|
|
87
|
+
profiles: [
|
|
88
|
+
{
|
|
89
|
+
name: NAME,
|
|
90
|
+
version: { path: 'issues.burpVersion' },
|
|
91
|
+
title: NAME,
|
|
92
|
+
maintainer: null,
|
|
93
|
+
summary: NAME,
|
|
94
|
+
license: null,
|
|
95
|
+
copyright: null,
|
|
96
|
+
copyright_email: null,
|
|
97
|
+
supports: [],
|
|
98
|
+
attributes: [],
|
|
99
|
+
depends: [],
|
|
100
|
+
groups: [],
|
|
101
|
+
status: 'loaded',
|
|
102
|
+
controls: [
|
|
103
|
+
{
|
|
104
|
+
path: 'issues.issue',
|
|
105
|
+
key: 'id',
|
|
106
|
+
id: { path: 'type', transformer: idToString },
|
|
107
|
+
title: { path: 'name' },
|
|
108
|
+
desc: { path: 'issueBackground', transformer: base_converter_1.parseHtml },
|
|
109
|
+
impact: {
|
|
110
|
+
path: 'severity',
|
|
111
|
+
transformer: (0, base_converter_1.impactMapping)(IMPACT_MAPPING)
|
|
112
|
+
},
|
|
113
|
+
tags: {
|
|
114
|
+
nist: {
|
|
115
|
+
path: 'vulnerabilityClassifications',
|
|
116
|
+
transformer: nistTag
|
|
117
|
+
},
|
|
118
|
+
cweid: {
|
|
119
|
+
path: 'vulnerabilityClassifications',
|
|
120
|
+
transformer: formatCweId
|
|
121
|
+
},
|
|
122
|
+
confidence: { path: 'confidence' }
|
|
123
|
+
},
|
|
124
|
+
descriptions: [
|
|
125
|
+
{
|
|
126
|
+
data: { path: 'issueBackground', transformer: base_converter_1.parseHtml },
|
|
127
|
+
label: 'check'
|
|
128
|
+
},
|
|
129
|
+
{
|
|
130
|
+
data: { path: 'remediationBackground', transformer: base_converter_1.parseHtml },
|
|
131
|
+
label: 'fix'
|
|
132
|
+
}
|
|
133
|
+
],
|
|
134
|
+
refs: [],
|
|
135
|
+
source_location: {},
|
|
136
|
+
code: '',
|
|
137
|
+
results: [
|
|
138
|
+
{
|
|
139
|
+
status: inspecjs_1.ExecJSON.ControlResultStatus.Failed,
|
|
140
|
+
code_desc: { transformer: formatCodeDesc },
|
|
141
|
+
run_time: 0,
|
|
142
|
+
start_time: { path: '$.issues.exportTime' }
|
|
143
|
+
}
|
|
144
|
+
]
|
|
145
|
+
}
|
|
146
|
+
],
|
|
147
|
+
sha256: ''
|
|
148
|
+
}
|
|
149
|
+
]
|
|
150
|
+
};
|
|
151
|
+
}
|
|
152
|
+
setMappings(customMappings) {
|
|
153
|
+
super.setMappings(customMappings);
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
exports.BurpSuiteMapper = BurpSuiteMapper;
|
|
157
|
+
//# sourceMappingURL=burpsuite-mapper.js.map
|