@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,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
@@ -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"}
@@ -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