larxius commited on
Commit
af2d630
·
verified ·
1 Parent(s): f5b61fd

Update backend_structured/scanners_core.py

Browse files
Files changed (1) hide show
  1. backend_structured/scanners_core.py +52 -7
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='#99CC33'>{u_sev}</font>", normal)],
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
- desc_p = f"<b>Description:</b><br/>{html.escape(u_desc)}"
1823
- elements.append(Paragraph(desc_p, normal))
1824
- elements.append(Spacer(1, 15))
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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(" ", "&nbsp;")
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())