Spaces:
Running on CPU Upgrade
Running on CPU Upgrade
Update backend_structured/scanners_core.py
Browse files
backend_structured/scanners_core.py
CHANGED
|
@@ -1799,15 +1799,23 @@ def generate_scan_pdf(scan, vulnerabilities):
|
|
| 1799 |
for u_idx, u_vuln in enumerate(unconfirmed_findings, start=1):
|
| 1800 |
u_title = getattr(u_vuln, 'title', f"Unconfirmed Finding #{u_idx}")
|
| 1801 |
u_cvss = str(getattr(u_vuln, 'cvss_score', '0.0'))
|
| 1802 |
-
u_cat = getattr(u_vuln, 'category', 'General')
|
| 1803 |
-
u_sev = getattr(u_vuln, 'severity', 'Low')
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1804 |
u_desc = getattr(u_vuln, 'description', '')
|
| 1805 |
-
u_vec = getattr(u_vuln, 'cvss_vector', 'CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:N')
|
| 1806 |
|
| 1807 |
elements.append(Paragraph(f"<b>A.{u_idx} {html.escape(u_title)} [Requires Verification]</b>", styles['Heading3']))
|
| 1808 |
u_data = [
|
| 1809 |
["Status", Paragraph("<font color='#EA580C'>Requires Verification</font>", normal), "CVSS Score", u_cvss],
|
| 1810 |
-
["Category", u_cat, "Severity", Paragraph(f"<font color='
|
| 1811 |
["CVSS Vector", u_vec, "", ""]
|
| 1812 |
]
|
| 1813 |
u_table = Table(u_data, colWidths=[80, 150, 80, 150])
|
|
@@ -1819,9 +1827,46 @@ def generate_scan_pdf(scan, vulnerabilities):
|
|
| 1819 |
]))
|
| 1820 |
elements.append(u_table)
|
| 1821 |
elements.append(Spacer(1, 8))
|
| 1822 |
-
|
| 1823 |
-
|
| 1824 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1825 |
|
| 1826 |
# Legal Disclaimer & Confidentiality Notice
|
| 1827 |
elements.append(PageBreak())
|
|
|
|
| 1799 |
for u_idx, u_vuln in enumerate(unconfirmed_findings, start=1):
|
| 1800 |
u_title = getattr(u_vuln, 'title', f"Unconfirmed Finding #{u_idx}")
|
| 1801 |
u_cvss = str(getattr(u_vuln, 'cvss_score', '0.0'))
|
| 1802 |
+
u_cat = html.escape(str(getattr(u_vuln, 'category', 'General')))
|
| 1803 |
+
u_sev = str(getattr(u_vuln, 'severity', 'Low')).capitalize()
|
| 1804 |
+
|
| 1805 |
+
u_sev_lower = u_sev.lower()
|
| 1806 |
+
if 'critical' in u_sev_lower: u_sev_hex = '#DC2626'
|
| 1807 |
+
elif 'high' in u_sev_lower: u_sev_hex = '#EA580C'
|
| 1808 |
+
elif 'medium' in u_sev_lower: u_sev_hex = '#D97706'
|
| 1809 |
+
elif 'low' in u_sev_lower: u_sev_hex = '#99CC33'
|
| 1810 |
+
else: u_sev_hex = '#2563EB'
|
| 1811 |
+
|
| 1812 |
u_desc = getattr(u_vuln, 'description', '')
|
| 1813 |
+
u_vec = html.escape(str(getattr(u_vuln, 'cvss_vector', 'CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:N')))
|
| 1814 |
|
| 1815 |
elements.append(Paragraph(f"<b>A.{u_idx} {html.escape(u_title)} [Requires Verification]</b>", styles['Heading3']))
|
| 1816 |
u_data = [
|
| 1817 |
["Status", Paragraph("<font color='#EA580C'>Requires Verification</font>", normal), "CVSS Score", u_cvss],
|
| 1818 |
+
["Category", u_cat, "Severity", Paragraph(f"<font color='{u_sev_hex}'>{u_sev}</font>", normal)],
|
| 1819 |
["CVSS Vector", u_vec, "", ""]
|
| 1820 |
]
|
| 1821 |
u_table = Table(u_data, colWidths=[80, 150, 80, 150])
|
|
|
|
| 1827 |
]))
|
| 1828 |
elements.append(u_table)
|
| 1829 |
elements.append(Spacer(1, 8))
|
| 1830 |
+
|
| 1831 |
+
if u_desc:
|
| 1832 |
+
u_desc_html = markdown_to_reportlab_html(u_desc)
|
| 1833 |
+
elements.append(Paragraph(f"<b>Description:</b><br/>{u_desc_html}", normal))
|
| 1834 |
+
elements.append(Spacer(1, 10))
|
| 1835 |
+
|
| 1836 |
+
u_proof_text = get_proof_of_detection(u_vuln, domain)
|
| 1837 |
+
if u_proof_text:
|
| 1838 |
+
elements.append(Paragraph("<b>Proof of Detection (Engine Payload Audit Log):</b>", styles['Normal']))
|
| 1839 |
+
elements.append(Spacer(1, 5))
|
| 1840 |
+
u_proof_lines = u_proof_text.split('\n')
|
| 1841 |
+
u_proof_html = []
|
| 1842 |
+
for line in u_proof_lines:
|
| 1843 |
+
escaped = html.escape(line).replace(" ", " ")
|
| 1844 |
+
if escaped.startswith("#"):
|
| 1845 |
+
u_proof_html.append(f"<font color='#94A3B8'>{escaped}</font>")
|
| 1846 |
+
elif "[Detection]" in escaped or "[System]" in escaped or "[Evidence]" in escaped:
|
| 1847 |
+
u_proof_html.append(f"<font color='#93C5FD'>{escaped}</font>")
|
| 1848 |
+
else:
|
| 1849 |
+
u_proof_html.append(f"<font color='#F8FAFC'>{escaped}</font>")
|
| 1850 |
+
|
| 1851 |
+
u_proof_str = "<br/>".join(u_proof_html)
|
| 1852 |
+
u_proof_table = Table([[Paragraph(f"<font face='Courier' size='8'>{u_proof_str}</font>", normal)]], colWidths=[460])
|
| 1853 |
+
u_proof_table.setStyle(TableStyle([
|
| 1854 |
+
('BACKGROUND', (0,0), (-1,-1), colors.HexColor("#0B0F19")),
|
| 1855 |
+
('TOPPADDING', (0,0), (-1,-1), 12),
|
| 1856 |
+
('BOTTOMPADDING', (0,0), (-1,-1), 12),
|
| 1857 |
+
('LEFTPADDING', (0,0), (-1,-1), 12),
|
| 1858 |
+
('RIGHTPADDING', (0,0), (-1,-1), 12),
|
| 1859 |
+
('CORNER_RADIUS', (0,0), (-1,-1), 4),
|
| 1860 |
+
]))
|
| 1861 |
+
elements.append(u_proof_table)
|
| 1862 |
+
elements.append(Spacer(1, 12))
|
| 1863 |
+
|
| 1864 |
+
u_rem = getattr(u_vuln, 'remediation', None)
|
| 1865 |
+
if u_rem:
|
| 1866 |
+
elements.append(Paragraph("<b>Remediation:</b>", styles['Normal']))
|
| 1867 |
+
u_rem_html = markdown_to_reportlab_html(u_rem)
|
| 1868 |
+
elements.append(Paragraph(u_rem_html, normal))
|
| 1869 |
+
elements.append(Spacer(1, 15))
|
| 1870 |
|
| 1871 |
# Legal Disclaimer & Confidentiality Notice
|
| 1872 |
elements.append(PageBreak())
|