@mitre/hdf-converters 2.13.0 → 2.14.0
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/lib/package.json +6 -6
- package/lib/src/base-converter.d.ts +9 -1
- package/lib/src/base-converter.d.ts.map +1 -1
- package/lib/src/base-converter.js +10 -2
- package/lib/src/base-converter.js.map +1 -1
- package/lib/src/converters-from-hdf/html/embedded-assets.d.ts +2 -2
- package/lib/src/converters-from-hdf/html/embedded-assets.d.ts.map +1 -1
- package/lib/src/converters-from-hdf/html/embedded-assets.js +2 -2
- package/lib/src/converters-from-hdf/html/embedded-assets.js.map +1 -1
- package/lib/src/converters-from-hdf/html/reverse-html-mapper.d.ts.map +1 -1
- package/lib/src/converters-from-hdf/html/reverse-html-mapper.js +6 -19
- package/lib/src/converters-from-hdf/html/reverse-html-mapper.js.map +1 -1
- package/lib/src/dbprotect-mapper.d.ts.map +1 -1
- package/lib/src/dbprotect-mapper.js +0 -23
- package/lib/src/dbprotect-mapper.js.map +1 -1
- package/lib/src/nessus-mapper.d.ts +3 -2
- package/lib/src/nessus-mapper.d.ts.map +1 -1
- package/lib/src/nessus-mapper.js +13 -3
- package/lib/src/nessus-mapper.js.map +1 -1
- package/lib/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +6 -6
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reverse-html-mapper.d.ts","sourceRoot":"","sources":["../../../../src/converters-from-hdf/html/reverse-html-mapper.ts"],"names":[],"mappings":"AASA,OAAO,EACL,qBAAqB,EACrB,wBAAwB,EAIzB,MAAM,UAAU,CAAC;AAMlB,OAAO,EACL,OAAO,EACP,WAAW,EACX,eAAe,EACf,aAAa,EACd,MAAM,cAAc,CAAC;AAEtB,KAAK,SAAS,GAAG;IACf,IAAI,EAAE,wBAAwB,GAAG,MAAM,CAAC;IACxC,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;CAC7B,CAAC;AAEF,KAAK,aAAa,GAAG;IACnB,IAAI,EAAE,wBAAwB,CAAC;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;CAC7B,CAAC;AAGF,oBAAY,eAAe;IACzB,SAAS,cAAc;IACvB,OAAO,YAAY;IACnB,aAAa,kBAAkB;CAChC;AAOD,qBAAa,mBAAmB;IAI9B,OAAO,CAAC,aAAa,CAyBnB;IAGF,UAAU,EAAE,WAAW,CA2DrB;gBAEU,KAAK,EAAE,SAAS,EAAE,EAAE,UAAU,EAAE,eAAe;IA4C3D,WAAW,CAAC,IAAI,EAAE,aAAa,EAAE,UAAU,EAAE,eAAe;
|
|
1
|
+
{"version":3,"file":"reverse-html-mapper.d.ts","sourceRoot":"","sources":["../../../../src/converters-from-hdf/html/reverse-html-mapper.ts"],"names":[],"mappings":"AASA,OAAO,EACL,qBAAqB,EACrB,wBAAwB,EAIzB,MAAM,UAAU,CAAC;AAMlB,OAAO,EACL,OAAO,EACP,WAAW,EACX,eAAe,EACf,aAAa,EACd,MAAM,cAAc,CAAC;AAEtB,KAAK,SAAS,GAAG;IACf,IAAI,EAAE,wBAAwB,GAAG,MAAM,CAAC;IACxC,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;CAC7B,CAAC;AAEF,KAAK,aAAa,GAAG;IACnB,IAAI,EAAE,wBAAwB,CAAC;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;CAC7B,CAAC;AAGF,oBAAY,eAAe;IACzB,SAAS,cAAc;IACvB,OAAO,YAAY;IACnB,aAAa,kBAAkB;CAChC;AAOD,qBAAa,mBAAmB;IAI9B,OAAO,CAAC,aAAa,CAyBnB;IAGF,UAAU,EAAE,WAAW,CA2DrB;gBAEU,KAAK,EAAE,SAAS,EAAE,EAAE,UAAU,EAAE,eAAe;IA4C3D,WAAW,CAAC,IAAI,EAAE,aAAa,EAAE,UAAU,EAAE,eAAe;IAkD5D,iBAAiB,CAAC,OAAO,EAAE,qBAAqB,EAAE;IA6GlD,gBAAgB,CACd,MAAM,EAAE,qBAAqB,EAC7B,YAAY,EAAE,qBAAqB,EAAE,GACpC,qBAAqB,GAAG;QAAC,OAAO,EAAE,OAAO,EAAE,CAAA;KAAC,GAAG;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAC,GAAG;QACrE,YAAY,EAAE,aAAa,CAAC;KAC7B,GAAG;QAAC,cAAc,EAAE,eAAe,CAAA;KAAC,GAAG;QAAC,WAAW,EAAE,MAAM,EAAE,CAAA;KAAC;IA6H/D,aAAa,CACX,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,EACZ,OAAO,SAAK,EACZ,QAAQ,SAAK,EACb,WAAW,CAAC,EAAE,MAAM,GACnB,MAAM;IAcT,wBAAwB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAWxC,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC;CAYhC"}
|
|
@@ -162,25 +162,12 @@ class FromHDFToHTMLMapper {
|
|
|
162
162
|
// Controls what components are shown in HTML
|
|
163
163
|
this.outputData.exportType = exportType;
|
|
164
164
|
// Pull out results from file
|
|
165
|
-
const
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
});
|
|
172
|
-
}
|
|
173
|
-
else {
|
|
174
|
-
file.data.contains.flatMap((profile) => {
|
|
175
|
-
profile.contains.flatMap((result) => {
|
|
176
|
-
for (const element of (file.filteredControls ?? [])) {
|
|
177
|
-
if (element === result.data.id) {
|
|
178
|
-
allResultLevels.push(result);
|
|
179
|
-
}
|
|
180
|
-
}
|
|
181
|
-
});
|
|
182
|
-
});
|
|
183
|
-
}
|
|
165
|
+
const filteredControlsSet = file.filteredControls ? new Set(file.filteredControls) : null;
|
|
166
|
+
const allResultLevels = file.data.contains.reduce((acc, profile) => {
|
|
167
|
+
const matchingResults = profile.contains.filter((result) => !filteredControlsSet || filteredControlsSet.has(result.data.id));
|
|
168
|
+
acc.push(...matchingResults);
|
|
169
|
+
return acc;
|
|
170
|
+
}, []);
|
|
184
171
|
// Begin filling out outpuData object to pass into HTML template
|
|
185
172
|
// Set high level generalized profile details
|
|
186
173
|
this.addProfileDetails(allResultLevels);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reverse-html-mapper.js","sourceRoot":"","sources":["../../../../src/converters-from-hdf/html/reverse-html-mapper.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n mdiAlert,\n mdiAlertCircle,\n mdiCheckCircle,\n mdiCircle,\n mdiCloseCircle,\n mdiEqualBox,\n mdiMinusCircle\n} from '@mdi/js';\nimport {\n ContextualizedControl,\n ContextualizedEvaluation,\n convertFileContextual,\n HDFControlSegment,\n isContextualizedEvaluation\n} from 'inspecjs';\nimport _ from 'lodash';\nimport Mustache from 'mustache';\nimport sanitize from 'sanitize-html';\nimport {formatCompliance, translateCompliance} from '../../utils/compliance';\nimport {html, js, css} from './embedded-assets';\nimport {\n IDetail,\n IOutputData,\n IResultSeverity,\n IResultStatus\n} from './html-types';\n\ntype InputData = {\n data: ContextualizedEvaluation | string;\n fileName: string;\n fileID: string;\n filteredControls?: string[];\n};\n\ntype ProcessedData = {\n data: ContextualizedEvaluation;\n fileName: string;\n fileID: string;\n filteredControls?: string[];\n};\n\n// All selectable export types for an HTML export\nexport enum FileExportTypes {\n Executive = 'Executive',\n Manager = 'Manager',\n Administrator = 'Administrator'\n}\n\n// Illegal characters which are not accepted by HTML id attribute\n// Generally includes everything that is not alphanumeric or characters [-,_]\n// Expand as needed\nconst ILLEGAL_CHARACTER_SET = [['\\\\.', '___PERIOD___']];\n\nexport class FromHDFToHTMLMapper {\n // Generated injectable HTML for icons\n // NOTE: Icons colors should align with Vue colors used in general dashboard from apps/frontend/src/store/color_hack.ts\n // ARIA NOTE: Since icons are supplementary, descriptions are not required\n private iconHTMLStore = {\n // Passed; green\n circleCheck: this.iconDataToSVG(mdiCheckCircle, 'rgb(76, 176, 79)'),\n // Failed; red\n circleCross: this.iconDataToSVG(mdiCloseCircle, 'rgb(243, 67, 53)'),\n // Not applicable; blue\n circleMinus: this.iconDataToSVG(mdiMinusCircle, 'rgb(3, 169, 244)'),\n // Not reviewed; yellow\n circleAlert: this.iconDataToSVG(mdiAlertCircle, 'rgb(254, 153, 0)'),\n // Profile error; purple\n triangleAlert: this.iconDataToSVG(mdiAlert, 'rgb(121, 134, 203)'),\n // Total count; black\n squareEqual: this.iconDataToSVG(mdiEqualBox, 'black'),\n // No severity; blue\n circleNone: this.iconDataToSVG(mdiCircle, 'rgb(3, 169, 244)'),\n // Low severity; yellow\n circleLow: this.iconDataToSVG(mdiCircle, 'rgb(255, 235, 59)'),\n // Medium severity; orange\n circleMedium: this.iconDataToSVG(mdiCircle, 'rgb(255, 152, 0)'),\n // High severity; deep orange\n circleHigh: this.iconDataToSVG(mdiCircle, 'rgb(255, 87, 34)'),\n // Critical severity; red\n circleCritical: this.iconDataToSVG(mdiCircle, 'rgb(244, 67, 54)'),\n // Generic circle\n circleWhite: this.iconDataToSVG(mdiCircle, 'rgb(0, 0, 0)')\n };\n\n // Default attributes\n outputData: IOutputData = {\n tailwindStyles: '',\n tailwindElements: '',\n // Used for profile status reporting\n statistics: {\n passed: 0,\n failed: 0,\n notApplicable: 0,\n notReviewed: 0,\n profileError: 0,\n totalResults: 0,\n passedTests: 0,\n passingTestsFailedResult: 0,\n failedTests: 0,\n totalTests: 0\n },\n // Used for profile severity reporting\n severity: {\n none: 0,\n low: 0,\n medium: 0,\n high: 0,\n critical: 0\n },\n // Used for profile compliance reporting\n compliance: {\n level: '',\n color: ''\n },\n files: [],\n resultSets: [],\n showResultSets: false,\n showCode: false,\n exportType: '',\n // Series of icons used for profile-related detail reports\n icons: {\n // Passed\n circleCheck: this.iconHTMLStore.circleCheck,\n // Failed\n circleCross: this.iconHTMLStore.circleCross,\n // Not applicable\n circleMinus: this.iconHTMLStore.circleMinus,\n // Not reviewed\n circleAlert: this.iconHTMLStore.circleAlert,\n // Profile error\n triangleAlert: this.iconHTMLStore.triangleAlert,\n // Total count\n squareEqual: this.iconHTMLStore.squareEqual,\n // No severity\n circleNone: this.iconHTMLStore.circleNone,\n // Low severity\n circleLow: this.iconHTMLStore.circleLow,\n // Medium severity\n circleMedium: this.iconHTMLStore.circleMedium,\n // High severity\n circleHigh: this.iconHTMLStore.circleHigh,\n // Critical severity\n circleCritical: this.iconHTMLStore.circleCritical\n }\n };\n\n constructor(files: InputData[], exportType: FileExportTypes) {\n // Set html element visibility based on export type\n switch (exportType) {\n case FileExportTypes.Executive:\n this.outputData.showResultSets = false;\n this.outputData.showCode = false;\n break;\n case FileExportTypes.Manager:\n this.outputData.showResultSets = true;\n this.outputData.showCode = false;\n break;\n case FileExportTypes.Administrator:\n this.outputData.showResultSets = true;\n this.outputData.showCode = true;\n }\n\n // Set default attribute values in preparation for value assignment\n this.outputData.files = [];\n this.outputData.resultSets = [];\n\n // Fill out data template for html file using received hdf file(s)\n for (const file of files) {\n // Check if provided data is string typed\n if (_.isString(file.data)) {\n const contextualizedFile = convertFileContextual(file.data);\n if (!isContextualizedEvaluation(contextualizedFile)) {\n throw new Error('Input string was not an HDF ExecJSON');\n }\n file.data = contextualizedFile;\n }\n\n this.addFiledata(\n {\n data: file.data,\n fileName: file.fileName,\n fileID: file.fileID,\n filteredControls: file.filteredControls\n },\n exportType\n );\n }\n }\n\n // Pulls and sets high level attributes of outputData object from file data\n addFiledata(file: ProcessedData, exportType: FileExportTypes) {\n // Set file profile data\n this.outputData.files.push({\n filename: file.fileName,\n toolVersion: _.get(file.data, 'data.version') as unknown as string,\n platform: _.get(file.data, 'data.platform.name') as unknown as string,\n duration: _.get(\n file.data,\n 'data.statistics.duration'\n ) as unknown as string\n });\n\n // Set export type\n // Controls what components are shown in HTML\n this.outputData.exportType = exportType;\n\n // Pull out results from file\n const allResultLevels: ContextualizedControl[] = [];\n if (file.filteredControls === undefined) {\n file.data.contains.map((profile) => {\n profile.contains.map((result) => {\n allResultLevels.push(result);\n });\n });\n } else {\n file.data.contains.flatMap((profile) => {\n profile.contains.flatMap((result) => {\n for (const element of (file.filteredControls ?? [])) {\n if (element === result.data.id) {\n allResultLevels.push(result);\n }\n }\n });\n });\n }\n\n // Begin filling out outpuData object to pass into HTML template\n // Set high level generalized profile details\n this.addProfileDetails(allResultLevels);\n\n // Set specific result details\n this.outputData.resultSets.push({\n filename: file.fileName,\n fileID: file.fileID,\n results: allResultLevels.map((result) =>\n this.addResultDetails(\n result,\n allResultLevels.filter(\n (searchingResult) => searchingResult.data.id === result.data.id\n )\n )\n )\n });\n }\n\n // Set attributes for high level generalized profile details\n addProfileDetails(results: ContextualizedControl[]) {\n let passed = 0;\n let failed = 0;\n let notApplicable = 0;\n let notReviewed = 0;\n let profileError = 0;\n let none = 0;\n let low = 0;\n let medium = 0;\n let high = 0;\n let critical = 0;\n let passedTests = 0;\n let failedTests = 0;\n let passingTestsFailedResult = 0;\n // Count out statuses and sub-statuses\n for (const result of results) {\n switch (result.root.hdf.status) {\n case 'Passed':\n passed++;\n passedTests += (result.root.hdf.segments || []).length;\n break;\n case 'Failed':\n failed++;\n passingTestsFailedResult += (result.root.hdf.segments || []).filter(\n (subStatus) => subStatus.status === 'passed'\n ).length;\n failedTests += (result.root.hdf.segments || []).filter(\n (subStatus) => subStatus.status === 'failed'\n ).length;\n break;\n case 'Not Applicable':\n notApplicable++;\n break;\n case 'Not Reviewed':\n notReviewed++;\n break;\n case 'Profile Error':\n profileError++;\n }\n // Count out severities\n switch (result.root.hdf.severity) {\n case 'none':\n none++;\n break;\n case 'low':\n low++;\n break;\n case 'medium':\n medium++;\n break;\n case 'high':\n high++;\n break;\n case 'critical':\n critical++;\n }\n }\n\n // Set following attributes from existing file data\n this.outputData.statistics = {\n passed: this.outputData.statistics.passed + passed,\n failed: this.outputData.statistics.failed + failed,\n notApplicable: this.outputData.statistics.notApplicable + notApplicable,\n notReviewed: this.outputData.statistics.notReviewed + notReviewed,\n profileError: this.outputData.statistics.profileError + profileError,\n totalResults: this.outputData.statistics.totalResults + results.length,\n passedTests: this.outputData.statistics.passedTests + passedTests,\n passingTestsFailedResult:\n this.outputData.statistics.passingTestsFailedResult +\n passingTestsFailedResult,\n failedTests: this.outputData.statistics.failedTests + failedTests,\n totalTests:\n this.outputData.statistics.totalTests +\n passingTestsFailedResult +\n failedTests\n };\n this.outputData.severity = {\n none: this.outputData.severity.none + none,\n low: this.outputData.severity.low + low,\n medium: this.outputData.severity.medium + medium,\n high: this.outputData.severity.high + high,\n critical: this.outputData.severity.critical + critical\n };\n\n // Calculate & set compliance level and color from result statuses\n // Set default compliance level and color\n this.outputData.compliance.level = '0.00%';\n this.outputData.compliance.color = 'low';\n\n // If results exist, calculate compliance level\n if (this.outputData.statistics.totalResults > 0) {\n // Formula: compliance = Passed/(Passed + Failed + Not Reviewed + Profile Error) * 100\n const complianceLevel = formatCompliance(\n (this.outputData.statistics.passed /\n (this.outputData.statistics.totalResults -\n this.outputData.statistics.notApplicable)) *\n 100\n );\n // Set compliance level\n this.outputData.compliance.level = complianceLevel.includes('NaN')\n ? '0.00%'\n : complianceLevel;\n // Determine color of compliance level\n // High compliance is green, medium is yellow, low is red\n this.outputData.compliance.color = translateCompliance(complianceLevel);\n }\n }\n\n // Sets attributes for each specific result\n addResultDetails(\n result: ContextualizedControl,\n resultLevels: ContextualizedControl[]\n ): ContextualizedControl & {details: IDetail[]} & {resultID: string} & {\n resultStatus: IResultStatus;\n } & {resultSeverity: IResultSeverity} & {controlTags: string[]} {\n // Check status of individual result to assign corresponding icon\n let statusColor;\n switch (result.root.hdf.status) {\n case 'Passed':\n statusColor = this.iconHTMLStore.circleCheck;\n break;\n case 'Failed':\n statusColor = this.iconHTMLStore.circleCross;\n break;\n case 'Not Applicable':\n statusColor = this.iconHTMLStore.circleMinus;\n break;\n case 'Not Reviewed':\n statusColor = this.iconHTMLStore.circleAlert;\n break;\n case 'Profile Error':\n statusColor = this.iconHTMLStore.triangleAlert;\n break;\n default:\n statusColor = this.iconHTMLStore.circleWhite;\n }\n\n // Severity is recorded as all lowercase by default; for aesthetic purposes, uppercase the first letter\n const severity = _.capitalize(result.root.hdf.severity);\n // Check severity of individual result to assign corresponding icon\n let severityColor;\n switch (result.root.hdf.severity) {\n case 'none':\n severityColor = this.iconHTMLStore.circleNone;\n break;\n case 'low':\n severityColor = this.iconHTMLStore.circleLow;\n break;\n case 'medium':\n severityColor = this.iconHTMLStore.circleMedium;\n break;\n case 'high':\n severityColor = this.iconHTMLStore.circleHigh;\n break;\n case 'critical':\n severityColor = this.iconHTMLStore.circleCritical;\n break;\n default:\n severityColor = this.iconHTMLStore.circleWhite;\n }\n\n // Grab NIST & CCI controls\n const allControls = [result.hdf.rawNistTags, result.hdf.wraps.tags.cci].filter(Boolean).flat();\n // Remove `Rev_4` item and replace `unmapped` with proper `UM-1` naming\n const filteredControls = allControls\n .map((control) => (control === 'unmapped' ? 'UM-1' : control))\n .filter((control) => control !== 'Rev_4');\n\n // Assign attributes\n return {\n ..._.set(\n result,\n 'hdf.segments',\n ([] as HDFControlSegment[]).concat.apply(\n [],\n resultLevels.map((resultLevel) => resultLevel.hdf.segments || [])\n )\n ),\n full_code: result.full_code,\n details: [\n {\n name: 'Control',\n value: result.data.id\n },\n {\n name: 'Title',\n value: result.data.title\n },\n {\n name: 'Caveat',\n value: result.hdf.descriptions.caveat\n },\n {\n name: 'Desc',\n value: result.data.desc\n },\n {\n name: 'Rationale',\n value: result.hdf.descriptions.rationale\n },\n {\n name: 'Justification',\n value: result.hdf.descriptions.justification\n },\n {\n name: 'Severity',\n value: result.root.hdf.severity\n },\n {\n name: 'Impact',\n value: result.data.impact\n },\n {\n name: 'Nist Controls',\n value: result.hdf.rawNistTags.join(', ')\n },\n {\n name: 'Check Text',\n value: result.hdf.descriptions.check || result.data.tags.check\n },\n {\n name: 'Fix Text',\n value: result.hdf.descriptions.fix || result.data.tags.fix\n }\n ].filter((v) => v.value).map((s) => ({...s, value: sanitize(s.value, {disallowedTagsMode: \"escape\"})})),\n resultID: this.replaceIllegalCharacters(result.hdf.wraps.id),\n resultStatus: {\n status: result.root.hdf.status,\n icon: statusColor\n },\n resultSeverity: {\n severity: severity,\n icon: severityColor\n },\n controlTags: filteredControls\n };\n }\n\n // Generate SVG HTML for icons for injection into export template\n iconDataToSVG(\n iconData: string,\n fill: string,\n widthPx = 24,\n heightPx = 24,\n description?: string\n ): string {\n let imgLabel;\n // Check if description is included in function call\n // If so, include description as title/aria-label\n if (description) {\n imgLabel = `title=\"${description}\" aria-label=\"${description}\"`;\n // Else hide aria\n } else {\n imgLabel = `aria-hidden=\"true\"`;\n }\n return `<svg style=\"width:${widthPx}px; height:${heightPx}px\" viewBox=\"0 0 ${widthPx} ${heightPx}\" role=\"img\" ${imgLabel}><path fill=\"${fill}\" d=\"${iconData}\"/></svg>`;\n }\n\n // Replace all found illegal characters in string with compliant string equivalent\n replaceIllegalCharacters(text: string): string {\n for (const illegalCharacter of ILLEGAL_CHARACTER_SET) {\n text = text.replace(\n new RegExp(`${illegalCharacter[0]}`, 'g'),\n illegalCharacter[1]\n );\n }\n return text;\n }\n\n // Prompt HTML generation from data pulled from file during constructor initialization\n async toHTML(): Promise<string> {\n // Pull export template + styles and create outputData object containing data to fill template with\n const template = html;\n this.outputData.tailwindStyles = css;\n // Remove source map reference in TW Elements library\n this.outputData.tailwindElements = js.replace(\n '//# sourceMappingURL=tw-elements.umd.min.js.map',\n ''\n );\n // Render template and return generated HTML file\n return Mustache.render(template, this.outputData);\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"reverse-html-mapper.js","sourceRoot":"","sources":["../../../../src/converters-from-hdf/html/reverse-html-mapper.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n mdiAlert,\n mdiAlertCircle,\n mdiCheckCircle,\n mdiCircle,\n mdiCloseCircle,\n mdiEqualBox,\n mdiMinusCircle\n} from '@mdi/js';\nimport {\n ContextualizedControl,\n ContextualizedEvaluation,\n convertFileContextual,\n HDFControlSegment,\n isContextualizedEvaluation\n} from 'inspecjs';\nimport _ from 'lodash';\nimport Mustache from 'mustache';\nimport sanitize from 'sanitize-html';\nimport {formatCompliance, translateCompliance} from '../../utils/compliance';\nimport {html, js, css} from './embedded-assets';\nimport {\n IDetail,\n IOutputData,\n IResultSeverity,\n IResultStatus\n} from './html-types';\n\ntype InputData = {\n data: ContextualizedEvaluation | string;\n fileName: string;\n fileID: string;\n filteredControls?: string[];\n};\n\ntype ProcessedData = {\n data: ContextualizedEvaluation;\n fileName: string;\n fileID: string;\n filteredControls?: string[];\n};\n\n// All selectable export types for an HTML export\nexport enum FileExportTypes {\n Executive = 'Executive',\n Manager = 'Manager',\n Administrator = 'Administrator'\n}\n\n// Illegal characters which are not accepted by HTML id attribute\n// Generally includes everything that is not alphanumeric or characters [-,_]\n// Expand as needed\nconst ILLEGAL_CHARACTER_SET = [['\\\\.', '___PERIOD___']];\n\nexport class FromHDFToHTMLMapper {\n // Generated injectable HTML for icons\n // NOTE: Icons colors should align with Vue colors used in general dashboard from apps/frontend/src/store/color_hack.ts\n // ARIA NOTE: Since icons are supplementary, descriptions are not required\n private iconHTMLStore = {\n // Passed; green\n circleCheck: this.iconDataToSVG(mdiCheckCircle, 'rgb(76, 176, 79)'),\n // Failed; red\n circleCross: this.iconDataToSVG(mdiCloseCircle, 'rgb(243, 67, 53)'),\n // Not applicable; blue\n circleMinus: this.iconDataToSVG(mdiMinusCircle, 'rgb(3, 169, 244)'),\n // Not reviewed; yellow\n circleAlert: this.iconDataToSVG(mdiAlertCircle, 'rgb(254, 153, 0)'),\n // Profile error; purple\n triangleAlert: this.iconDataToSVG(mdiAlert, 'rgb(121, 134, 203)'),\n // Total count; black\n squareEqual: this.iconDataToSVG(mdiEqualBox, 'black'),\n // No severity; blue\n circleNone: this.iconDataToSVG(mdiCircle, 'rgb(3, 169, 244)'),\n // Low severity; yellow\n circleLow: this.iconDataToSVG(mdiCircle, 'rgb(255, 235, 59)'),\n // Medium severity; orange\n circleMedium: this.iconDataToSVG(mdiCircle, 'rgb(255, 152, 0)'),\n // High severity; deep orange\n circleHigh: this.iconDataToSVG(mdiCircle, 'rgb(255, 87, 34)'),\n // Critical severity; red\n circleCritical: this.iconDataToSVG(mdiCircle, 'rgb(244, 67, 54)'),\n // Generic circle\n circleWhite: this.iconDataToSVG(mdiCircle, 'rgb(0, 0, 0)')\n };\n\n // Default attributes\n outputData: IOutputData = {\n tailwindStyles: '',\n tailwindElements: '',\n // Used for profile status reporting\n statistics: {\n passed: 0,\n failed: 0,\n notApplicable: 0,\n notReviewed: 0,\n profileError: 0,\n totalResults: 0,\n passedTests: 0,\n passingTestsFailedResult: 0,\n failedTests: 0,\n totalTests: 0\n },\n // Used for profile severity reporting\n severity: {\n none: 0,\n low: 0,\n medium: 0,\n high: 0,\n critical: 0\n },\n // Used for profile compliance reporting\n compliance: {\n level: '',\n color: ''\n },\n files: [],\n resultSets: [],\n showResultSets: false,\n showCode: false,\n exportType: '',\n // Series of icons used for profile-related detail reports\n icons: {\n // Passed\n circleCheck: this.iconHTMLStore.circleCheck,\n // Failed\n circleCross: this.iconHTMLStore.circleCross,\n // Not applicable\n circleMinus: this.iconHTMLStore.circleMinus,\n // Not reviewed\n circleAlert: this.iconHTMLStore.circleAlert,\n // Profile error\n triangleAlert: this.iconHTMLStore.triangleAlert,\n // Total count\n squareEqual: this.iconHTMLStore.squareEqual,\n // No severity\n circleNone: this.iconHTMLStore.circleNone,\n // Low severity\n circleLow: this.iconHTMLStore.circleLow,\n // Medium severity\n circleMedium: this.iconHTMLStore.circleMedium,\n // High severity\n circleHigh: this.iconHTMLStore.circleHigh,\n // Critical severity\n circleCritical: this.iconHTMLStore.circleCritical\n }\n };\n\n constructor(files: InputData[], exportType: FileExportTypes) {\n // Set html element visibility based on export type\n switch (exportType) {\n case FileExportTypes.Executive:\n this.outputData.showResultSets = false;\n this.outputData.showCode = false;\n break;\n case FileExportTypes.Manager:\n this.outputData.showResultSets = true;\n this.outputData.showCode = false;\n break;\n case FileExportTypes.Administrator:\n this.outputData.showResultSets = true;\n this.outputData.showCode = true;\n }\n\n // Set default attribute values in preparation for value assignment\n this.outputData.files = [];\n this.outputData.resultSets = [];\n\n // Fill out data template for html file using received hdf file(s)\n for (const file of files) {\n // Check if provided data is string typed\n if (_.isString(file.data)) {\n const contextualizedFile = convertFileContextual(file.data);\n if (!isContextualizedEvaluation(contextualizedFile)) {\n throw new Error('Input string was not an HDF ExecJSON');\n }\n file.data = contextualizedFile;\n }\n\n this.addFiledata(\n {\n data: file.data,\n fileName: file.fileName,\n fileID: file.fileID,\n filteredControls: file.filteredControls\n },\n exportType\n );\n }\n }\n\n // Pulls and sets high level attributes of outputData object from file data\n addFiledata(file: ProcessedData, exportType: FileExportTypes) {\n // Set file profile data\n this.outputData.files.push({\n filename: file.fileName,\n toolVersion: _.get(file.data, 'data.version') as unknown as string,\n platform: _.get(file.data, 'data.platform.name') as unknown as string,\n duration: _.get(\n file.data,\n 'data.statistics.duration'\n ) as unknown as string\n });\n\n // Set export type\n // Controls what components are shown in HTML\n this.outputData.exportType = exportType;\n\n // Pull out results from file\n const filteredControlsSet = file.filteredControls ? new Set(file.filteredControls) : null;\n const allResultLevels = file.data.contains.reduce<ContextualizedControl[]>(\n (acc, profile) => {\n const matchingResults = profile.contains.filter(\n (result) => !filteredControlsSet || filteredControlsSet.has(result.data.id)\n );\n\n acc.push(...matchingResults);\n return acc;\n },\n []\n );\n\n // Begin filling out outpuData object to pass into HTML template\n // Set high level generalized profile details\n this.addProfileDetails(allResultLevels);\n\n // Set specific result details\n this.outputData.resultSets.push({\n filename: file.fileName,\n fileID: file.fileID,\n results: allResultLevels.map((result) =>\n this.addResultDetails(\n result,\n allResultLevels.filter(\n (searchingResult) => searchingResult.data.id === result.data.id\n )\n )\n )\n });\n }\n\n // Set attributes for high level generalized profile details\n addProfileDetails(results: ContextualizedControl[]) {\n let passed = 0;\n let failed = 0;\n let notApplicable = 0;\n let notReviewed = 0;\n let profileError = 0;\n let none = 0;\n let low = 0;\n let medium = 0;\n let high = 0;\n let critical = 0;\n let passedTests = 0;\n let failedTests = 0;\n let passingTestsFailedResult = 0;\n // Count out statuses and sub-statuses\n for (const result of results) {\n switch (result.root.hdf.status) {\n case 'Passed':\n passed++;\n passedTests += (result.root.hdf.segments || []).length;\n break;\n case 'Failed':\n failed++;\n passingTestsFailedResult += (result.root.hdf.segments || []).filter(\n (subStatus) => subStatus.status === 'passed'\n ).length;\n failedTests += (result.root.hdf.segments || []).filter(\n (subStatus) => subStatus.status === 'failed'\n ).length;\n break;\n case 'Not Applicable':\n notApplicable++;\n break;\n case 'Not Reviewed':\n notReviewed++;\n break;\n case 'Profile Error':\n profileError++;\n }\n // Count out severities\n switch (result.root.hdf.severity) {\n case 'none':\n none++;\n break;\n case 'low':\n low++;\n break;\n case 'medium':\n medium++;\n break;\n case 'high':\n high++;\n break;\n case 'critical':\n critical++;\n }\n }\n\n // Set following attributes from existing file data\n this.outputData.statistics = {\n passed: this.outputData.statistics.passed + passed,\n failed: this.outputData.statistics.failed + failed,\n notApplicable: this.outputData.statistics.notApplicable + notApplicable,\n notReviewed: this.outputData.statistics.notReviewed + notReviewed,\n profileError: this.outputData.statistics.profileError + profileError,\n totalResults: this.outputData.statistics.totalResults + results.length,\n passedTests: this.outputData.statistics.passedTests + passedTests,\n passingTestsFailedResult:\n this.outputData.statistics.passingTestsFailedResult +\n passingTestsFailedResult,\n failedTests: this.outputData.statistics.failedTests + failedTests,\n totalTests:\n this.outputData.statistics.totalTests +\n passingTestsFailedResult +\n failedTests\n };\n this.outputData.severity = {\n none: this.outputData.severity.none + none,\n low: this.outputData.severity.low + low,\n medium: this.outputData.severity.medium + medium,\n high: this.outputData.severity.high + high,\n critical: this.outputData.severity.critical + critical\n };\n\n // Calculate & set compliance level and color from result statuses\n // Set default compliance level and color\n this.outputData.compliance.level = '0.00%';\n this.outputData.compliance.color = 'low';\n\n // If results exist, calculate compliance level\n if (this.outputData.statistics.totalResults > 0) {\n // Formula: compliance = Passed/(Passed + Failed + Not Reviewed + Profile Error) * 100\n const complianceLevel = formatCompliance(\n (this.outputData.statistics.passed /\n (this.outputData.statistics.totalResults -\n this.outputData.statistics.notApplicable)) *\n 100\n );\n // Set compliance level\n this.outputData.compliance.level = complianceLevel.includes('NaN')\n ? '0.00%'\n : complianceLevel;\n // Determine color of compliance level\n // High compliance is green, medium is yellow, low is red\n this.outputData.compliance.color = translateCompliance(complianceLevel);\n }\n }\n\n // Sets attributes for each specific result\n addResultDetails(\n result: ContextualizedControl,\n resultLevels: ContextualizedControl[]\n ): ContextualizedControl & {details: IDetail[]} & {resultID: string} & {\n resultStatus: IResultStatus;\n } & {resultSeverity: IResultSeverity} & {controlTags: string[]} {\n // Check status of individual result to assign corresponding icon\n let statusColor;\n switch (result.root.hdf.status) {\n case 'Passed':\n statusColor = this.iconHTMLStore.circleCheck;\n break;\n case 'Failed':\n statusColor = this.iconHTMLStore.circleCross;\n break;\n case 'Not Applicable':\n statusColor = this.iconHTMLStore.circleMinus;\n break;\n case 'Not Reviewed':\n statusColor = this.iconHTMLStore.circleAlert;\n break;\n case 'Profile Error':\n statusColor = this.iconHTMLStore.triangleAlert;\n break;\n default:\n statusColor = this.iconHTMLStore.circleWhite;\n }\n\n // Severity is recorded as all lowercase by default; for aesthetic purposes, uppercase the first letter\n const severity = _.capitalize(result.root.hdf.severity);\n // Check severity of individual result to assign corresponding icon\n let severityColor;\n switch (result.root.hdf.severity) {\n case 'none':\n severityColor = this.iconHTMLStore.circleNone;\n break;\n case 'low':\n severityColor = this.iconHTMLStore.circleLow;\n break;\n case 'medium':\n severityColor = this.iconHTMLStore.circleMedium;\n break;\n case 'high':\n severityColor = this.iconHTMLStore.circleHigh;\n break;\n case 'critical':\n severityColor = this.iconHTMLStore.circleCritical;\n break;\n default:\n severityColor = this.iconHTMLStore.circleWhite;\n }\n\n // Grab NIST & CCI controls\n const allControls = [result.hdf.rawNistTags, result.hdf.wraps.tags.cci].filter(Boolean).flat();\n // Remove `Rev_4` item and replace `unmapped` with proper `UM-1` naming\n const filteredControls = allControls\n .map((control) => (control === 'unmapped' ? 'UM-1' : control))\n .filter((control) => control !== 'Rev_4');\n\n // Assign attributes\n return {\n ..._.set(\n result,\n 'hdf.segments',\n ([] as HDFControlSegment[]).concat.apply(\n [],\n resultLevels.map((resultLevel) => resultLevel.hdf.segments || [])\n )\n ),\n full_code: result.full_code,\n details: [\n {\n name: 'Control',\n value: result.data.id\n },\n {\n name: 'Title',\n value: result.data.title\n },\n {\n name: 'Caveat',\n value: result.hdf.descriptions.caveat\n },\n {\n name: 'Desc',\n value: result.data.desc\n },\n {\n name: 'Rationale',\n value: result.hdf.descriptions.rationale\n },\n {\n name: 'Justification',\n value: result.hdf.descriptions.justification\n },\n {\n name: 'Severity',\n value: result.root.hdf.severity\n },\n {\n name: 'Impact',\n value: result.data.impact\n },\n {\n name: 'Nist Controls',\n value: result.hdf.rawNistTags.join(', ')\n },\n {\n name: 'Check Text',\n value: result.hdf.descriptions.check || result.data.tags.check\n },\n {\n name: 'Fix Text',\n value: result.hdf.descriptions.fix || result.data.tags.fix\n }\n ].filter((v) => v.value).map((s) => ({...s, value: sanitize(s.value, {disallowedTagsMode: \"escape\"})})),\n resultID: this.replaceIllegalCharacters(result.hdf.wraps.id),\n resultStatus: {\n status: result.root.hdf.status,\n icon: statusColor\n },\n resultSeverity: {\n severity: severity,\n icon: severityColor\n },\n controlTags: filteredControls\n };\n }\n\n // Generate SVG HTML for icons for injection into export template\n iconDataToSVG(\n iconData: string,\n fill: string,\n widthPx = 24,\n heightPx = 24,\n description?: string\n ): string {\n let imgLabel;\n // Check if description is included in function call\n // If so, include description as title/aria-label\n if (description) {\n imgLabel = `title=\"${description}\" aria-label=\"${description}\"`;\n // Else hide aria\n } else {\n imgLabel = `aria-hidden=\"true\"`;\n }\n return `<svg style=\"width:${widthPx}px; height:${heightPx}px\" viewBox=\"0 0 ${widthPx} ${heightPx}\" role=\"img\" ${imgLabel}><path fill=\"${fill}\" d=\"${iconData}\"/></svg>`;\n }\n\n // Replace all found illegal characters in string with compliant string equivalent\n replaceIllegalCharacters(text: string): string {\n for (const illegalCharacter of ILLEGAL_CHARACTER_SET) {\n text = text.replace(\n new RegExp(`${illegalCharacter[0]}`, 'g'),\n illegalCharacter[1]\n );\n }\n return text;\n }\n\n // Prompt HTML generation from data pulled from file during constructor initialization\n async toHTML(): Promise<string> {\n // Pull export template + styles and create outputData object containing data to fill template with\n const template = html;\n this.outputData.tailwindStyles = css;\n // Remove source map reference in TW Elements library\n this.outputData.tailwindElements = js.replace(\n '//# sourceMappingURL=tw-elements.umd.min.js.map',\n ''\n );\n // Render template and return generated HTML file\n return Mustache.render(template, this.outputData);\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dbprotect-mapper.d.ts","sourceRoot":"","sources":["../../src/dbprotect-mapper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,QAAQ,EAAC,MAAM,UAAU,CAAC;AAGlC,OAAO,EACL,aAAa,EACb,WAAW,EAEX,eAAe,EAEhB,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"dbprotect-mapper.d.ts","sourceRoot":"","sources":["../../src/dbprotect-mapper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,QAAQ,EAAC,MAAM,UAAU,CAAC;AAGlC,OAAO,EACL,aAAa,EACb,WAAW,EAEX,eAAe,EAEhB,MAAM,kBAAkB,CAAC;AA4E1B,qBAAa,eAAgB,SAAQ,aAAa;IAChD,OAAO,EAAE,OAAO,CAAC;IAEjB,QAAQ,EAAE,eAAe,CACvB,QAAQ,CAAC,SAAS,GAAG;QAAC,WAAW,EAAE,OAAO,CAAA;KAAC,EAC3C,WAAW,CACZ,CAsDC;gBACU,YAAY,EAAE,MAAM,EAAE,OAAO,UAAQ;CAIlD"}
|
|
@@ -89,27 +89,6 @@ function getStatus(input) {
|
|
|
89
89
|
}
|
|
90
90
|
return inspecjs_1.ExecJSON.ControlResultStatus.Skipped;
|
|
91
91
|
}
|
|
92
|
-
function getBacktrace(input) {
|
|
93
|
-
if (input === 'Failed') {
|
|
94
|
-
return 'DB Protect Failed Check';
|
|
95
|
-
}
|
|
96
|
-
else {
|
|
97
|
-
return '';
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
|
-
function handleBacktrace(input) {
|
|
101
|
-
if (Array.isArray(input)) {
|
|
102
|
-
input = input.map((element) => {
|
|
103
|
-
if (_.get(element, 'backtrace')[0] === '') {
|
|
104
|
-
return _.omit(element, 'backtrace');
|
|
105
|
-
}
|
|
106
|
-
else {
|
|
107
|
-
return element;
|
|
108
|
-
}
|
|
109
|
-
});
|
|
110
|
-
}
|
|
111
|
-
return input;
|
|
112
|
-
}
|
|
113
92
|
function idToString(id) {
|
|
114
93
|
if (typeof id === 'string' || typeof id === 'number') {
|
|
115
94
|
return id.toString();
|
|
@@ -158,11 +137,9 @@ class DBProtectMapper extends base_converter_1.BaseConverter {
|
|
|
158
137
|
},
|
|
159
138
|
results: [
|
|
160
139
|
{
|
|
161
|
-
arrayTransformer: handleBacktrace,
|
|
162
140
|
status: { path: 'Result Status', transformer: getStatus },
|
|
163
141
|
code_desc: { path: 'Details' },
|
|
164
142
|
start_time: { path: 'Date' },
|
|
165
|
-
backtrace: [{ path: 'Result Status', transformer: getBacktrace }]
|
|
166
143
|
}
|
|
167
144
|
]
|
|
168
145
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dbprotect-mapper.js","sourceRoot":"","sources":["../../src/dbprotect-mapper.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"dbprotect-mapper.js","sourceRoot":"","sources":["../../src/dbprotect-mapper.ts"],"names":[],"mappings":"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","sourcesContent":["import {ExecJSON} from 'inspecjs';\nimport * as _ from 'lodash';\nimport {version as HeimdallToolsVersion} from '../package.json';\nimport {\n BaseConverter,\n ILookupPath,\n impactMapping,\n MappedTransform,\n parseXml\n} from './base-converter';\nimport {\n DEFAULT_STATIC_CODE_ANALYSIS_NIST_TAGS,\n getCCIsForNISTTags\n} from './utils/global';\n\nconst IMPACT_MAPPING: Map<string, number> = new Map([\n ['high', 0.7],\n ['medium', 0.5],\n ['low', 0.3],\n ['informational', 0]\n]);\n\nfunction compileFindings(\n input: Record<string, unknown>\n): Record<string, unknown> {\n const keys = _.get(input, 'dataset.metadata.item');\n const findings = _.get(input, 'dataset.data.row');\n\n let output: unknown[] = [];\n\n if (Array.isArray(keys) && Array.isArray(findings)) {\n const keyNames = keys.map((element: Record<string, unknown>): string => {\n return _.get(element, 'name') as string;\n });\n output = findings.map((element: Record<string, unknown>) => {\n return Object.fromEntries(\n keyNames.map(function (name: string, i: number) {\n return [name, _.get(element, `value[${i}]`)];\n })\n );\n });\n }\n return Object.fromEntries([['data', output]]);\n}\nfunction formatSummary(entry: unknown): string {\n const text = [];\n text.push(`Organization : ${_.get(entry, 'Organization')}`);\n text.push(`Asset : ${_.get(entry, 'Check Asset')}`);\n text.push(`Asset Type : ${_.get(entry, 'Asset Type')}`);\n text.push(`IP Address, Port, Instance : ${_.get(entry, 'Asset Type')}`);\n text.push(\n `IP Address, Port, Instance : ${_.get(\n entry,\n 'IP Address, Port, Instance'\n )} `\n );\n return text.join('\\n');\n}\nfunction formatDesc(entry: unknown): string {\n const text = [];\n text.push(`Task : ${_.get(entry, 'Task')}`);\n text.push(`Check Category : ${_.get(entry, 'Check Category')}`);\n return text.join('; ');\n}\nfunction getStatus(input: unknown): ExecJSON.ControlResultStatus {\n switch (input) {\n case 'Fact':\n return ExecJSON.ControlResultStatus.Skipped;\n case 'Failed':\n return ExecJSON.ControlResultStatus.Failed;\n case 'Finding':\n return ExecJSON.ControlResultStatus.Failed;\n case 'Not A Finding':\n return ExecJSON.ControlResultStatus.Passed;\n }\n return ExecJSON.ControlResultStatus.Skipped;\n}\nfunction idToString(id: unknown): string {\n if (typeof id === 'string' || typeof id === 'number') {\n return id.toString();\n } else {\n return '';\n }\n}\n\nexport class DBProtectMapper extends BaseConverter {\n withRaw: boolean;\n\n mappings: MappedTransform<\n ExecJSON.Execution & {passthrough: unknown},\n ILookupPath\n > = {\n platform: {\n name: 'Heimdall Tools',\n release: HeimdallToolsVersion\n },\n version: HeimdallToolsVersion,\n statistics: {},\n profiles: [\n {\n name: {path: 'data.[0].Policy'},\n title: {path: 'data.[0].Job Name'},\n summary: {path: 'data.[0]', transformer: formatSummary},\n supports: [],\n attributes: [],\n groups: [],\n status: 'loaded',\n controls: [\n {\n path: 'data',\n key: 'id',\n tags: {\n nist: DEFAULT_STATIC_CODE_ANALYSIS_NIST_TAGS,\n cci: getCCIsForNISTTags(DEFAULT_STATIC_CODE_ANALYSIS_NIST_TAGS)\n },\n refs: [],\n source_location: {},\n title: {path: 'Check'},\n id: {path: 'Check ID', transformer: idToString},\n desc: {transformer: formatDesc},\n impact: {\n path: 'Risk DV',\n transformer: impactMapping(IMPACT_MAPPING)\n },\n code: {\n transformer: (vulnerability: Record<string, unknown>): string =>\n JSON.stringify(vulnerability, null, 2)\n },\n results: [\n {\n status: {path: 'Result Status', transformer: getStatus},\n code_desc: {path: 'Details'},\n start_time: {path: 'Date'},\n }\n ]\n }\n ],\n sha256: ''\n }\n ],\n passthrough: {\n transformer: (data: Record<string, unknown>): Record<string, unknown> => {\n return {...(this.withRaw && {raw: data})};\n }\n }\n };\n constructor(dbProtectXml: string, withRaw = false) {\n super(compileFindings(parseXml(dbProtectXml)));\n this.withRaw = withRaw;\n }\n}\n"]}
|
|
@@ -1,10 +1,11 @@
|
|
|
1
|
+
import type { X2jOptions } from 'fast-xml-parser';
|
|
1
2
|
import { ExecJSON } from 'inspecjs';
|
|
2
|
-
import { BaseConverter, ILookupPath, MappedTransform } from './base-converter';
|
|
3
|
+
import { BaseConverter, type ILookupPath, type MappedTransform } from './base-converter';
|
|
3
4
|
export declare class NessusResults {
|
|
4
5
|
data: Record<string, unknown>;
|
|
5
6
|
customMapping?: MappedTransform<ExecJSON.Execution, ILookupPath>;
|
|
6
7
|
withRaw: boolean;
|
|
7
|
-
constructor(nessusXml: string, withRaw?: boolean);
|
|
8
|
+
constructor(nessusXml: string, withRaw?: boolean, options?: X2jOptions);
|
|
8
9
|
toHdf(): Promise<ExecJSON.Execution[] | ExecJSON.Execution>;
|
|
9
10
|
}
|
|
10
11
|
export declare class NessusMapper extends BaseConverter {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nessus-mapper.d.ts","sourceRoot":"","sources":["../../src/nessus-mapper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,QAAQ,EAAC,MAAM,UAAU,CAAC;AAGlC,OAAO,EACL,aAAa,
|
|
1
|
+
{"version":3,"file":"nessus-mapper.d.ts","sourceRoot":"","sources":["../../src/nessus-mapper.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAyB,UAAU,EAAC,MAAM,iBAAiB,CAAC;AACxE,OAAO,EAAC,QAAQ,EAAC,MAAM,UAAU,CAAC;AAGlC,OAAO,EACL,aAAa,EAGb,KAAK,WAAW,EAEhB,KAAK,eAAe,EAErB,MAAM,kBAAkB,CAAC;AA0M1B,qBAAa,aAAa;IACxB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9B,aAAa,CAAC,EAAE,eAAe,CAAC,QAAQ,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;IACjE,OAAO,EAAE,OAAO,CAAC;gBAEf,SAAS,EAAE,MAAM,EACjB,OAAO,UAAQ,EACf,OAAO,GAAE,UAAe;IAgBpB,KAAK,IAAI,OAAO,CAAC,QAAQ,CAAC,SAAS,EAAE,GAAG,QAAQ,CAAC,SAAS,CAAC;CA6ClE;AAED,qBAAa,YAAa,SAAQ,aAAa;IAC7C,OAAO,EAAE,OAAO,CAAC;IAEjB,QAAQ,EAAE,eAAe,CACvB,QAAQ,CAAC,SAAS,GAAG;QAAC,WAAW,EAAE,OAAO,CAAA;KAAC,EAC3C,WAAW,CACZ,CAkGC;gBACU,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,UAAQ;CAIjE"}
|
package/lib/src/nessus-mapper.js
CHANGED
|
@@ -60,7 +60,8 @@ const COMPLIANCE_ACTUAL_VALUE = 'compliance-actual-value';
|
|
|
60
60
|
const NA_PLUGIN_OUTPUT = 'This Nessus Plugin does not provide output message.';
|
|
61
61
|
const NESSUS_PLUGINS_NIST_MAPPING = new NessusPluginsNistMapping_1.NessusPluginsNistMapping();
|
|
62
62
|
const CCI_NIST_MAPPING = new CciNistMapping_1.CciNistMapping();
|
|
63
|
-
const
|
|
63
|
+
const DEFAULT_NESSUS_MAX_TOTAL_EXPANSIONS = 1_000_000_000;
|
|
64
|
+
const DEFAULT_NIST_TAG = ["SI-2"];
|
|
64
65
|
let parseHtml;
|
|
65
66
|
let policyName;
|
|
66
67
|
let version;
|
|
@@ -225,8 +226,17 @@ class NessusResults {
|
|
|
225
226
|
data;
|
|
226
227
|
customMapping;
|
|
227
228
|
withRaw;
|
|
228
|
-
constructor(nessusXml, withRaw = false) {
|
|
229
|
-
|
|
229
|
+
constructor(nessusXml, withRaw = false, options = {}) {
|
|
230
|
+
// Only allowing overrides for MAX_TOTAL_EXPANSIONS for right now but structured in a way to let people override anything in the future
|
|
231
|
+
const { maxTotalExpansions = DEFAULT_NESSUS_MAX_TOTAL_EXPANSIONS } = _.isPlainObject(options.processEntities)
|
|
232
|
+
? options.processEntities
|
|
233
|
+
: {};
|
|
234
|
+
this.data = (0, base_converter_1.parseXml)(nessusXml, {
|
|
235
|
+
processEntities: {
|
|
236
|
+
...base_converter_1.DEFAULT_XML_PROCESS_ENTITIES_OPTIONS,
|
|
237
|
+
maxTotalExpansions,
|
|
238
|
+
},
|
|
239
|
+
});
|
|
230
240
|
this.withRaw = withRaw;
|
|
231
241
|
}
|
|
232
242
|
async toHdf() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nessus-mapper.js","sourceRoot":"","sources":["../../src/nessus-mapper.ts"],"names":[],"mappings":"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","sourcesContent":["import {ExecJSON} from 'inspecjs';\nimport * as _ from 'lodash';\nimport {version as HeimdallToolsVersion} from '../package.json';\nimport {\n BaseConverter,\n ILookupPath,\n impactMapping,\n MappedTransform,\n buildParseHtmlFunc,\n parseXml\n} from './base-converter';\nimport {CciNistMapping} from './mappings/CciNistMapping';\nimport {NessusPluginsNistMapping} from './mappings/NessusPluginsNistMapping';\n\n// Constants\nconst IMPACT_MAPPING: Map<string, number> = new Map([\n ['4', 0.9],\n ['3', 0.7],\n ['i', 0.7],\n ['2', 0.5],\n ['ii', 0.5],\n ['1', 0.3],\n ['iii', 0.3],\n ['0', 0.0]\n]);\nconst COMPLIANCE_PATH = 'compliance-reference';\nconst COMPLIANCE_CHECK_NAME = 'compliance-check-name';\nconst COMPLIANCE_INFO = 'compliance-info';\nconst COMPLIANCE_SOLUTION = 'compliance-solution';\nconst COMPLIANCE_RESULT = 'compliance-result';\nconst COMPLIANCE_ACTUAL_VALUE = 'compliance-actual-value';\nconst NA_PLUGIN_OUTPUT = 'This Nessus Plugin does not provide output message.';\nconst NESSUS_PLUGINS_NIST_MAPPING = new NessusPluginsNistMapping();\nconst CCI_NIST_MAPPING = new CciNistMapping();\nconst DEFAULT_NIST_TAG: string[] = [];\n\nlet parseHtml: (input: unknown) => string;\n\nlet policyName: string;\nlet version: string;\n\nfunction getPolicyName(): string {\n return 'Nessus ' + policyName;\n}\nfunction getVersion(): string {\n return version;\n}\n\nfunction getId(item: unknown): string {\n if (_.has(item, COMPLIANCE_PATH)) {\n return parseRef(\n _.get(item, COMPLIANCE_PATH) as unknown as string,\n 'Vuln-ID'\n )[0];\n } else {\n return _.get(item, 'pluginID') as unknown as string;\n }\n}\nfunction getTitle(item: unknown): string {\n if (_.has(item, COMPLIANCE_CHECK_NAME)) {\n return _.get(item, COMPLIANCE_CHECK_NAME) as unknown as string;\n } else {\n return _.get(item, 'pluginName') as unknown as string;\n }\n}\nfunction getDesc(item: unknown): string {\n if (_.has(item, COMPLIANCE_INFO)) {\n return parseHtml(_.get(item, COMPLIANCE_INFO));\n } else {\n return parseHtml(formatDesc(item));\n }\n}\nfunction formatDesc(issue: unknown): string {\n const desc = [];\n desc.push(`Plugin Family: ${_.get(issue, 'pluginFamily')}`);\n desc.push(`Port: ${_.get(issue, 'port')}`);\n desc.push(`Protocol: ${_.get(issue, 'protocol')}`);\n return desc.join('; ') + ';';\n}\nfunction pluginNistTag(item: unknown): string[] {\n const family = _.get(item, 'pluginFamily') as unknown as string;\n const id = _.get(item, 'pluginID') as unknown as string;\n return NESSUS_PLUGINS_NIST_MAPPING.nistFilter(family, id, DEFAULT_NIST_TAG);\n}\nfunction cciNistTag(input: string): string[] {\n const identifiers: string[] = parseRef(input, 'CCI');\n return CCI_NIST_MAPPING.nistFilter(identifiers, DEFAULT_NIST_TAG, false);\n}\n\nfunction parseRef(input: string, key: string): string[] {\n const matches = input.split(',').filter((element) => element.startsWith(key));\n return matches.map((element) => element.split('|')[1]);\n}\nfunction getImpact(item: unknown): number {\n if (_.has(item, COMPLIANCE_PATH)) {\n return impactMapping(IMPACT_MAPPING)(\n parseRef(_.get(item, COMPLIANCE_PATH) as unknown as string, 'CAT').join(\n ''\n )\n );\n } else {\n return impactMapping(IMPACT_MAPPING)(_.get(item, 'severity'));\n }\n}\n\nfunction getCheck(item: unknown): string {\n if (_.has(item, COMPLIANCE_SOLUTION)) {\n return parseHtml(_.get(item, COMPLIANCE_SOLUTION));\n } else {\n return '';\n }\n}\n\nfunction getFix(item: unknown): string {\n const fix = _.get(item, 'solution');\n if (fix && fix !== 'n/a') {\n return fix;\n }\n return '';\n}\n\nfunction getNist(item: unknown): string[] {\n if (_.has(item, COMPLIANCE_PATH)) {\n return cciNistTag(_.get(item, COMPLIANCE_PATH) as unknown as string);\n } else {\n return pluginNistTag(item);\n }\n}\nfunction getCci(item: unknown): string[] {\n if (_.has(item, COMPLIANCE_PATH)) {\n return parseRef(_.get(item, COMPLIANCE_PATH) as unknown as string, 'CCI');\n } else {\n return [];\n }\n}\nfunction getRid(item: unknown): string {\n if (_.has(item, COMPLIANCE_PATH)) {\n return parseRef(\n _.get(item, COMPLIANCE_PATH) as unknown as string,\n 'Rule-ID'\n ).join(',');\n } else {\n return _.get(item, 'pluginID') as unknown as string;\n }\n}\nfunction getStig(item: unknown): string {\n if (_.has(item, COMPLIANCE_PATH)) {\n return parseRef(\n _.get(item, COMPLIANCE_PATH) as unknown as string,\n 'STIG-ID'\n ).join(',');\n } else {\n return '';\n }\n}\nfunction getStatus(item: unknown): ExecJSON.ControlResultStatus {\n const result: string = _.get(item, COMPLIANCE_RESULT, '');\n switch (result) {\n case 'PASSED':\n return ExecJSON.ControlResultStatus.Passed;\n case 'WARNING':\n return ExecJSON.ControlResultStatus.Skipped;\n case 'ERROR':\n return ExecJSON.ControlResultStatus.Error;\n default:\n return ExecJSON.ControlResultStatus.Failed;\n }\n}\nfunction formatCodeDesc(item: unknown): string {\n if (_.has(item, 'description')) {\n return parseHtml(_.get(item, 'description') || NA_PLUGIN_OUTPUT);\n } else {\n return parseHtml(_.get(item, 'plugin_output') || NA_PLUGIN_OUTPUT);\n }\n}\nfunction getStartTime(tag: unknown): string {\n if (Array.isArray(tag)) {\n return _.get(\n tag.find((element) => {\n return _.get(element, 'name') === 'HOST_START';\n }),\n 'text'\n );\n } else {\n return _.get(tag, 'text') as unknown as string;\n }\n}\n\nfunction cleanData(control: unknown[]): ExecJSON.Control[] {\n const filteredControl = control as ExecJSON.Control[];\n filteredControl.forEach((element) => {\n if (element instanceof Object) {\n if (_.get(element.tags, 'cci').length === 0) {\n element.tags = _.omit(element.tags, 'cci');\n }\n if (_.get(element.tags, 'rid') === '') {\n element.tags = _.omit(element.tags, 'rid');\n }\n if (_.get(element.tags, 'stig_id') === '') {\n element.tags = _.omit(element.tags, 'stig_id');\n }\n element.refs = element.refs.filter((ref) => ref.url);\n if (element.descriptions !== undefined && element.descriptions !== null) {\n element.descriptions = element.descriptions.filter(\n (description) => description && description.data\n );\n }\n }\n });\n return filteredControl;\n}\nexport class NessusResults {\n data: Record<string, unknown>;\n customMapping?: MappedTransform<ExecJSON.Execution, ILookupPath>;\n withRaw: boolean;\n constructor(nessusXml: string, withRaw = false) {\n this.data = parseXml(nessusXml);\n this.withRaw = withRaw;\n }\n\n async toHdf(): Promise<ExecJSON.Execution[] | ExecJSON.Execution> {\n parseHtml = await buildParseHtmlFunc();\n\n const results: ExecJSON.Execution[] = [];\n policyName = _.get(\n this.data,\n 'NessusClientData_v2.Policy.policyName'\n ) as string;\n const preference = _.get(\n this.data,\n 'NessusClientData_v2.Policy.Preferences.ServerPreferences.preference'\n );\n if (Array.isArray(preference)) {\n version =\n _.get(\n preference.find((element: Record<string, unknown>) => {\n return _.get(element, 'name') === 'sc_version';\n }),\n 'value'\n ) || '';\n }\n const reportHost = _.get(\n this.data,\n 'NessusClientData_v2.Report.ReportHost'\n );\n if (Array.isArray(reportHost)) {\n reportHost.forEach((element: Record<string, unknown>) => {\n const entry = new NessusMapper(element, this.withRaw);\n if (this.customMapping !== undefined) {\n entry.setMappings(this.customMapping);\n }\n results.push(entry.toHdf());\n });\n return results;\n } else {\n const result = new NessusMapper(\n reportHost as Record<string, unknown>,\n this.withRaw\n );\n if (this.customMapping !== undefined) {\n result.setMappings(this.customMapping);\n }\n return result.toHdf();\n }\n }\n}\n\nexport class NessusMapper extends BaseConverter {\n withRaw: boolean;\n\n mappings: MappedTransform<\n ExecJSON.Execution & {passthrough: unknown},\n ILookupPath\n > = {\n platform: {\n name: 'Heimdall Tools',\n release: HeimdallToolsVersion,\n target_id: {path: 'name'}\n },\n version: HeimdallToolsVersion,\n statistics: {},\n profiles: [\n {\n name: {transformer: getPolicyName},\n version: {transformer: getVersion},\n title: {transformer: getPolicyName},\n summary: {transformer: getPolicyName},\n supports: [],\n attributes: [],\n groups: [],\n status: 'loaded',\n controls: [\n {\n arrayTransformer: cleanData,\n path: 'ReportItem',\n key: 'id',\n tags: {\n nist: {transformer: getNist},\n cci: {transformer: getCci},\n rid: {transformer: getRid},\n stig_id: {transformer: getStig},\n risk_factor: {path: 'risk_factor'},\n plugin_type: {path: 'plugin_type'},\n plugin_publication_date: {path: 'plugin_publication_date'},\n fname: {path: 'fname'},\n cvss3_base_score: {path: 'cvss3_base_score'},\n cvss_base_score: {path: 'cvss_base_score'}\n },\n refs: [\n {\n url: {\n path: 'see_also'\n }\n }\n ],\n source_location: {},\n title: {transformer: getTitle},\n id: {transformer: getId},\n desc: {transformer: getDesc},\n descriptions: [\n {\n data: {transformer: getCheck},\n label: 'check'\n },\n {\n data: {transformer: getFix},\n label: 'fix'\n }\n ],\n impact: {transformer: getImpact},\n code: {\n transformer: (reportItem: unknown) =>\n JSON.stringify(reportItem, null, 2)\n },\n results: [\n {\n status: {transformer: getStatus},\n code_desc: {transformer: formatCodeDesc},\n message: {\n path: ['plugin_output', COMPLIANCE_ACTUAL_VALUE],\n transformer: (value: unknown) => {\n if (value === null || value === undefined) {\n return value;\n }\n return String(value);\n }\n },\n start_time: {\n path: '$.HostProperties.tag',\n transformer: getStartTime\n }\n }\n ]\n }\n ],\n sha256: ''\n }\n ],\n passthrough: {\n transformer: (data: Record<string, unknown>): Record<string, unknown> => {\n return {\n auxiliary_data: [\n {\n name: 'Nessus',\n data: _.omit(data, ['name', 'ReportItem'])\n }\n ],\n ...(this.withRaw && {raw: data})\n };\n }\n }\n };\n constructor(nessusJson: Record<string, unknown>, withRaw = false) {\n super(nessusJson);\n this.withRaw = withRaw;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"nessus-mapper.js","sourceRoot":"","sources":["../../src/nessus-mapper.ts"],"names":[],"mappings":"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","sourcesContent":["import type {ProcessEntitiesOptions, X2jOptions} from 'fast-xml-parser';\nimport {ExecJSON} from 'inspecjs';\nimport * as _ from 'lodash';\nimport {version as HeimdallToolsVersion} from '../package.json';\nimport {\n BaseConverter,\n buildParseHtmlFunc,\n DEFAULT_XML_PROCESS_ENTITIES_OPTIONS,\n type ILookupPath,\n impactMapping,\n type MappedTransform,\n parseXml,\n} from './base-converter';\nimport {CciNistMapping} from './mappings/CciNistMapping';\nimport {NessusPluginsNistMapping} from './mappings/NessusPluginsNistMapping';\n\n// Constants\nconst IMPACT_MAPPING: Map<string, number> = new Map([\n ['4', 0.9],\n ['3', 0.7],\n ['i', 0.7],\n ['2', 0.5],\n ['ii', 0.5],\n ['1', 0.3],\n ['iii', 0.3],\n ['0', 0.0]\n]);\nconst COMPLIANCE_PATH = 'compliance-reference';\nconst COMPLIANCE_CHECK_NAME = 'compliance-check-name';\nconst COMPLIANCE_INFO = 'compliance-info';\nconst COMPLIANCE_SOLUTION = 'compliance-solution';\nconst COMPLIANCE_RESULT = 'compliance-result';\nconst COMPLIANCE_ACTUAL_VALUE = 'compliance-actual-value';\nconst NA_PLUGIN_OUTPUT = 'This Nessus Plugin does not provide output message.';\nconst NESSUS_PLUGINS_NIST_MAPPING = new NessusPluginsNistMapping();\nconst CCI_NIST_MAPPING = new CciNistMapping();\nconst DEFAULT_NESSUS_MAX_TOTAL_EXPANSIONS = 1_000_000_000;\nconst DEFAULT_NIST_TAG: string[] = [\"SI-2\"];\n\nlet parseHtml: (input: unknown) => string;\n\nlet policyName: string;\nlet version: string;\n\nfunction getPolicyName(): string {\n return 'Nessus ' + policyName;\n}\nfunction getVersion(): string {\n return version;\n}\n\nfunction getId(item: unknown): string {\n if (_.has(item, COMPLIANCE_PATH)) {\n return parseRef(\n _.get(item, COMPLIANCE_PATH) as unknown as string,\n 'Vuln-ID'\n )[0];\n } else {\n return _.get(item, 'pluginID') as unknown as string;\n }\n}\nfunction getTitle(item: unknown): string {\n if (_.has(item, COMPLIANCE_CHECK_NAME)) {\n return _.get(item, COMPLIANCE_CHECK_NAME) as unknown as string;\n } else {\n return _.get(item, 'pluginName') as unknown as string;\n }\n}\nfunction getDesc(item: unknown): string {\n if (_.has(item, COMPLIANCE_INFO)) {\n return parseHtml(_.get(item, COMPLIANCE_INFO));\n } else {\n return parseHtml(formatDesc(item));\n }\n}\nfunction formatDesc(issue: unknown): string {\n const desc = [];\n desc.push(`Plugin Family: ${_.get(issue, 'pluginFamily')}`);\n desc.push(`Port: ${_.get(issue, 'port')}`);\n desc.push(`Protocol: ${_.get(issue, 'protocol')}`);\n return desc.join('; ') + ';';\n}\nfunction pluginNistTag(item: unknown): string[] {\n const family = _.get(item, 'pluginFamily') as unknown as string;\n const id = _.get(item, 'pluginID') as unknown as string;\n return NESSUS_PLUGINS_NIST_MAPPING.nistFilter(family, id, DEFAULT_NIST_TAG);\n}\nfunction cciNistTag(input: string): string[] {\n const identifiers: string[] = parseRef(input, 'CCI');\n return CCI_NIST_MAPPING.nistFilter(identifiers, DEFAULT_NIST_TAG, false);\n}\n\nfunction parseRef(input: string, key: string): string[] {\n const matches = input.split(',').filter((element) => element.startsWith(key));\n return matches.map((element) => element.split('|')[1]);\n}\nfunction getImpact(item: unknown): number {\n if (_.has(item, COMPLIANCE_PATH)) {\n return impactMapping(IMPACT_MAPPING)(\n parseRef(_.get(item, COMPLIANCE_PATH) as unknown as string, 'CAT').join(\n ''\n )\n );\n } else {\n return impactMapping(IMPACT_MAPPING)(_.get(item, 'severity'));\n }\n}\n\nfunction getCheck(item: unknown): string {\n if (_.has(item, COMPLIANCE_SOLUTION)) {\n return parseHtml(_.get(item, COMPLIANCE_SOLUTION));\n } else {\n return '';\n }\n}\n\nfunction getFix(item: unknown): string {\n const fix = _.get(item, 'solution');\n if (fix && fix !== 'n/a') {\n return fix;\n }\n return '';\n}\n\nfunction getNist(item: unknown): string[] {\n if (_.has(item, COMPLIANCE_PATH)) {\n return cciNistTag(_.get(item, COMPLIANCE_PATH) as unknown as string);\n } else {\n return pluginNistTag(item);\n }\n}\nfunction getCci(item: unknown): string[] {\n if (_.has(item, COMPLIANCE_PATH)) {\n return parseRef(_.get(item, COMPLIANCE_PATH) as unknown as string, 'CCI');\n } else {\n return [];\n }\n}\nfunction getRid(item: unknown): string {\n if (_.has(item, COMPLIANCE_PATH)) {\n return parseRef(\n _.get(item, COMPLIANCE_PATH) as unknown as string,\n 'Rule-ID'\n ).join(',');\n } else {\n return _.get(item, 'pluginID') as unknown as string;\n }\n}\nfunction getStig(item: unknown): string {\n if (_.has(item, COMPLIANCE_PATH)) {\n return parseRef(\n _.get(item, COMPLIANCE_PATH) as unknown as string,\n 'STIG-ID'\n ).join(',');\n } else {\n return '';\n }\n}\nfunction getStatus(item: unknown): ExecJSON.ControlResultStatus {\n const result: string = _.get(item, COMPLIANCE_RESULT, '');\n switch (result) {\n case 'PASSED':\n return ExecJSON.ControlResultStatus.Passed;\n case 'WARNING':\n return ExecJSON.ControlResultStatus.Skipped;\n case 'ERROR':\n return ExecJSON.ControlResultStatus.Error;\n default:\n return ExecJSON.ControlResultStatus.Failed;\n }\n}\nfunction formatCodeDesc(item: unknown): string {\n if (_.has(item, 'description')) {\n return parseHtml(_.get(item, 'description') || NA_PLUGIN_OUTPUT);\n } else {\n return parseHtml(_.get(item, 'plugin_output') || NA_PLUGIN_OUTPUT);\n }\n}\nfunction getStartTime(tag: unknown): string {\n if (Array.isArray(tag)) {\n return _.get(\n tag.find((element) => {\n return _.get(element, 'name') === 'HOST_START';\n }),\n 'text'\n );\n } else {\n return _.get(tag, 'text') as unknown as string;\n }\n}\n\nfunction cleanData(control: unknown[]): ExecJSON.Control[] {\n const filteredControl = control as ExecJSON.Control[];\n filteredControl.forEach((element) => {\n if (element instanceof Object) {\n if (_.get(element.tags, 'cci').length === 0) {\n element.tags = _.omit(element.tags, 'cci');\n }\n if (_.get(element.tags, 'rid') === '') {\n element.tags = _.omit(element.tags, 'rid');\n }\n if (_.get(element.tags, 'stig_id') === '') {\n element.tags = _.omit(element.tags, 'stig_id');\n }\n element.refs = element.refs.filter((ref) => ref.url);\n if (element.descriptions !== undefined && element.descriptions !== null) {\n element.descriptions = element.descriptions.filter(\n (description) => description && description.data\n );\n }\n }\n });\n return filteredControl;\n}\nexport class NessusResults {\n data: Record<string, unknown>;\n customMapping?: MappedTransform<ExecJSON.Execution, ILookupPath>;\n withRaw: boolean;\n constructor(\n nessusXml: string,\n withRaw = false,\n options: X2jOptions = {},\n ) { \n // Only allowing overrides for MAX_TOTAL_EXPANSIONS for right now but structured in a way to let people override anything in the future\n const {maxTotalExpansions = DEFAULT_NESSUS_MAX_TOTAL_EXPANSIONS} =\n _.isPlainObject(options.processEntities)\n ? (options.processEntities as ProcessEntitiesOptions)\n : {};\n this.data = parseXml(nessusXml, {\n processEntities: {\n ...DEFAULT_XML_PROCESS_ENTITIES_OPTIONS,\n maxTotalExpansions,\n },\n });\n this.withRaw = withRaw;\n }\n\n async toHdf(): Promise<ExecJSON.Execution[] | ExecJSON.Execution> {\n parseHtml = await buildParseHtmlFunc();\n\n const results: ExecJSON.Execution[] = [];\n policyName = _.get(\n this.data,\n 'NessusClientData_v2.Policy.policyName'\n ) as string;\n const preference = _.get(\n this.data,\n 'NessusClientData_v2.Policy.Preferences.ServerPreferences.preference'\n );\n if (Array.isArray(preference)) {\n version =\n _.get(\n preference.find((element: Record<string, unknown>) => {\n return _.get(element, 'name') === 'sc_version';\n }),\n 'value'\n ) || '';\n }\n const reportHost = _.get(\n this.data,\n 'NessusClientData_v2.Report.ReportHost'\n );\n if (Array.isArray(reportHost)) {\n reportHost.forEach((element: Record<string, unknown>) => {\n const entry = new NessusMapper(element, this.withRaw);\n if (this.customMapping !== undefined) {\n entry.setMappings(this.customMapping);\n }\n results.push(entry.toHdf());\n });\n return results;\n } else {\n const result = new NessusMapper(\n reportHost as Record<string, unknown>,\n this.withRaw\n );\n if (this.customMapping !== undefined) {\n result.setMappings(this.customMapping);\n }\n return result.toHdf();\n }\n }\n}\n\nexport class NessusMapper extends BaseConverter {\n withRaw: boolean;\n\n mappings: MappedTransform<\n ExecJSON.Execution & {passthrough: unknown},\n ILookupPath\n > = {\n platform: {\n name: 'Heimdall Tools',\n release: HeimdallToolsVersion,\n target_id: {path: 'name'}\n },\n version: HeimdallToolsVersion,\n statistics: {},\n profiles: [\n {\n name: {transformer: getPolicyName},\n version: {transformer: getVersion},\n title: {transformer: getPolicyName},\n summary: {transformer: getPolicyName},\n supports: [],\n attributes: [],\n groups: [],\n status: 'loaded',\n controls: [\n {\n arrayTransformer: cleanData,\n path: 'ReportItem',\n key: 'id',\n tags: {\n nist: {transformer: getNist},\n cci: {transformer: getCci},\n rid: {transformer: getRid},\n stig_id: {transformer: getStig},\n risk_factor: {path: 'risk_factor'},\n plugin_type: {path: 'plugin_type'},\n plugin_publication_date: {path: 'plugin_publication_date'},\n fname: {path: 'fname'},\n cvss3_base_score: {path: 'cvss3_base_score'},\n cvss_base_score: {path: 'cvss_base_score'}\n },\n refs: [\n {\n url: {\n path: 'see_also'\n }\n }\n ],\n source_location: {},\n title: {transformer: getTitle},\n id: {transformer: getId},\n desc: {transformer: getDesc},\n descriptions: [\n {\n data: {transformer: getCheck},\n label: 'check'\n },\n {\n data: {transformer: getFix},\n label: 'fix'\n }\n ],\n impact: {transformer: getImpact},\n code: {\n transformer: (reportItem: unknown) =>\n JSON.stringify(reportItem, null, 2)\n },\n results: [\n {\n status: {transformer: getStatus},\n code_desc: {transformer: formatCodeDesc},\n message: {\n path: ['plugin_output', COMPLIANCE_ACTUAL_VALUE],\n transformer: (value: unknown) => {\n if (value === null || value === undefined) {\n return value;\n }\n return String(value);\n }\n },\n start_time: {\n path: '$.HostProperties.tag',\n transformer: getStartTime\n }\n }\n ]\n }\n ],\n sha256: ''\n }\n ],\n passthrough: {\n transformer: (data: Record<string, unknown>): Record<string, unknown> => {\n return {\n auxiliary_data: [\n {\n name: 'Nessus',\n data: _.omit(data, ['name', 'ReportItem'])\n }\n ],\n ...(this.withRaw && {raw: data})\n };\n }\n }\n };\n constructor(nessusJson: Record<string, unknown>, withRaw = false) {\n super(nessusJson);\n this.withRaw = withRaw;\n }\n}\n"]}
|