fix: lenient finding parsing — models return confidence as words/strings

Root cause of empty results: models emit findings with confidence as a string
('High') or cvss as a number, but the Finding struct typed confidence as f64, so
serde failed the ENTIRE array on any mismatch -> 0 findings every run.

extract_findings now parses into serde_json::Value and coerces each field
(string/number/word), normalizes severity, and accepts qualitative confidence
(High->0.9 etc). Verified live: whitebox on a vulnerable sample now yields
validated findings (IDOR confirmed by vote).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
CyberSecurityUPandClaude Opus 4.8 committed 2026-06-23 19:49:37 -03:00
1 parent c6fd5d6ac8
commit e565270f43
35 files changed
+2188 -12

No files matched your search

+84
View File
@@ -0,0 +1,84 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<HTML>
<HEAD>
<title>login</title>
<meta name="vs_showGrid" content="True">
<meta name="GENERATOR" Content="Microsoft Visual Studio .NET 7.1">
<meta name="CODE_LANGUAGE" Content="C#">
<meta name="vs_defaultClientScript" content="JavaScript">
<meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
<LINK href="styles.css" type="text/css" rel="stylesheet">
</HEAD>
<body>
<form name="frmLogin" method="post" action="login.aspx" id="frmLogin">
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUKLTIyMzk2OTgxMQ9kFgICAQ9kFgICAQ9kFgQCAQ8WBB4EaHJlZgUKbG9naW4uYXNweB4JaW5uZXJodG1sBQVsb2dpbmQCAw8WBB8AZB4HVmlzaWJsZWhkGAEFHl9fQ29udHJvbHNSZXF1aXJlUG9zdEJhY2tLZXlfXxYBBQ9jYlBlcnNpc3RDb29raWVzwbv+Q8XadeewSqHhJbH9z4dvJw==" />
<input type="hidden" name="__VIEWSTATEGENERATOR" id="__VIEWSTATEGENERATOR" value="C2EE9ABB" />
<input type="hidden" name="__EVENTVALIDATION" id="__EVENTVALIDATION" value="/wEWWwLoz/fGCgLStq24BwK3jsrkBALtuvfLDQKC3IeGDAKA1c7TCAKR1ca+DAL4pI3HDAL4pI3HDAL4pOGsCQL4pOGsCQL4pJXDAgL4pJXDAgLdy+foBQLdy+foBQLdy5uPDQLdy5uPDQLdy4+iBgLdy4+iBgLdy6P5DwLdy6P5DwLdy9edBwLdy9edBwLdy8swAt3LyzAC3cv/1wkC3cv/1wkC3cuT6gIC3cuT6gIC3cvH0w8C3cvH0w8C3cv79ggC3cv79ggCttLFnwoCttLFnwoCttL5sgMCttL5sgMCttLtyQwCttLtyQwCttKB7AUCttKB7AUCttK1gw0CttK1gw0CttKppgYCttKppgYCttLd+g8CttLd+g8CttLxkQcCttLxkQcCttKl+QUCttKl+QUCttLZnQ0CttLZnQ0Ci/mrBQKL+asFAov539kJAov539kJAov58/wCAov58/wCAov555MKAov555MKAov5m7YDAov5m7YDAov5j80MAov5j80MAov5o+AFAov5o+AFAov514QNAov514QNAov5i+wLAov5i+wLAov5v4MDAov5v4MDAryT68QJAryT68QJAryTn5sBAryTn5sBAryTs74KAryTs74KAryTp9UDAryTp9UDAryT2+kMAryT2+kMAryTz4wEAryTz4wEAryT46MNAryT46MNAryTl8YGAryTl8YGAryTy68DAryTy68Dd0Rgovd3OQ+5671bSjRIeEF0OOs=" />
<TABLE id="Table1" cellSpacing="0" cellPadding="5" width="790" align="center" border="0">
<TR>
<TD style="COLOR: #e6dccf" bgColor="#806640" height="75"><a href="https://www.acunetix.com/"><IMG src="images/logo_acunetix.gif" align="absMiddle" border="0" alt="Acunetix website security"></a></TD>
<TD style="FONT-WEIGHT: bold; FONT-SIZE: small; COLOR: #e6dccf" align="right" bgColor="#806640"
height="75">Test Website for <a href="https://www.acunetix.com/vulnerability-scanner/">Acunetix Web Vulnerability Scanner</a></TD>
</TR>
</TABLE>
<TABLE id="Table2" cellSpacing="0" cellPadding="5" width="790" align="center" border="0">
<TR>
<TD class="MenuBar" style="BORDER-LEFT: #806040 1px solid"><A class="menu" title="About" href="about.aspx">about</A>
<A class="menu" title="Latest news" href="default.aspx">news</A> <a href="login.aspx" id="MainMenu1_lnkLog" class="menu" name="lnkLog">login</a> <a href="Signup.aspx" id="MainMenu1_lnkSignup" class="menu" name="lnkSignup">
signup</a> <A class="menu" title="Network scanner" href="https://www.acunetix.com/vulnerability-scanner/network-vulnerability-scanner/">network scanner</A>
<A class="menu" title="Network vuln help" href="https://www.acunetix.com/blog/articles/network-vulnerability-assessment-gotchas-avoid/">network vuln help</A>
</TD>
<td class="MenuBar" align="right" width="50px">
<A href="rssFeed.aspx"><IMG src="images/rss.gif" border="0"></A>
</td>
</TR>
</TABLE>
<TABLE id="Table1" cellSpacing="0" cellPadding="10" width="790" align="center" border="0">
<TR>
<TD vAlign="top" align="center">
<TABLE id="Table2" cellSpacing="0" cellPadding="5" border="0" align="center" class="FramedForm">
<TR>
<TD>Username:</TD>
<TD align="right">
<input name="tbUsername" type="text" id="tbUsername" class="Login" /></TD>
</TR>
<TR>
<TD>Password:</TD>
<TD align="right">
<input name="tbPassword" type="password" id="tbPassword" class="Login" /></TD>
</TR>
<TR>
<TD align="left" colSpan="2"><input name="cbPersistCookie" type="checkbox" id="cbPersistCookie" checked="checked" class="classic" />
Remember me
</TD>
</TR>
<TR>
<TD></TD>
<TD align="right">
<input type="submit" name="btnLogin" value="Login" id="btnLogin" /></TD>
</TR>
</TABLE>
</TD>
<TD vAlign="top" width="200" colSpan="2">
<table id="RightPanel1_Calendar" class="Calendar" cellspacing="0" cellpadding="1" title="Calendar" border="0" bgcolor="#E6DCCF">
<tr><td colspan="7" bgcolor="#E6B873"><font size="2"><table class="Calendar" cellspacing="0" border="0" width="100%">
<tr><td width="15%"><font size="2"><b><a href="javascript:__doPostBack('RightPanel1$Calendar','V9617')" style="color:Black" title="Go to the previous month">&lt;</a></b></font></td><td align="center" width="70%"><font size="2"><b>June 2026</b></font></td><td align="right" width="15%"><font size="2"><b><a href="javascript:__doPostBack('RightPanel1$Calendar','V9678')" style="color:Black" title="Go to the next month">&gt;</a></b></font></td></tr>
</table></font></td></tr><tr><th align="center" abbr="Sunday" scope="col"><font size="2">Sun</font></th><th align="center" abbr="Monday" scope="col"><font size="2">Mon</font></th><th align="center" abbr="Tuesday" scope="col"><font size="2">Tue</font></th><th align="center" abbr="Wednesday" scope="col"><font size="2">Wed</font></th><th align="center" abbr="Thursday" scope="col"><font size="2">Thu</font></th><th align="center" abbr="Friday" scope="col"><font size="2">Fri</font></th><th align="center" abbr="Saturday" scope="col"><font size="2">Sat</font></th></tr><tr><td align="center" width="14%"><font size="2"><a href="javascript:__doPostBack('RightPanel1$Calendar','9647')" style="color:Black" title="May 31">31</a></font></td><td align="center" width="14%"><font size="2"><a href="javascript:__doPostBack('RightPanel1$Calendar','9648')" style="color:Black" title="June 01">1</a></font></td><td align="center" width="14%"><font size="2"><a href="javascript:__doPostBack('RightPanel1$Calendar','9649')" style="color:Black" title="June 02">2</a></font></td><td align="center" width="14%"><font size="2"><a href="javascript:__doPostBack('RightPanel1$Calendar','9650')" style="color:Black" title="June 03">3</a></font></td><td align="center" width="14%"><font size="2"><a href="javascript:__doPostBack('RightPanel1$Calendar','9651')" style="color:Black" title="June 04">4</a></font></td><td align="center" width="14%"><font size="2"><a href="javascript:__doPostBack('RightPanel1$Calendar','9652')" style="color:Black" title="June 05">5</a></font></td><td align="center" width="14%"><font size="2"><a href="javascript:__doPostBack('RightPanel1$Calendar','9653')" style="color:Black" title="June 06">6</a></font></td></tr><tr><td align="center" width="14%"><font size="2"><a href="javascript:__doPostBack('RightPanel1$Calendar','9654')" style="color:Black" title="June 07">7</a></font></td><td align="center" width="14%"><font size="2"><a href="javascript:__doPostBack('RightPanel1$Calendar','9655')" style="color:Black" title="June 08">8</a></font></td><td align="center" width="14%"><font size="2"><a href="javascript:__doPostBack('RightPanel1$Calendar','9656')" style="color:Black" title="June 09">9</a></font></td><td align="center" width="14%"><font size="2"><a href="javascript:__doPostBack('RightPanel1$Calendar','9657')" style="color:Black" title="June 10">10</a></font></td><td align="center" width="14%"><font size="2"><a href="javascript:__doPostBack('RightPanel1$Calendar','9658')" style="color:Black" title="June 11">11</a></font></td><td align="center" width="14%"><font size="2"><a href="javascript:__doPostBack('RightPanel1$Calendar','9659')" style="color:Black" title="June 12">12</a></font></td><td align="center" width="14%"><font size="2"><a href="javascript:__doPostBack('RightPanel1$Calendar','9660')" style="color:Black" title="June 13">13</a></font></td></tr><tr><td align="center" width="14%"><font size="2"><a href="javascript:__doPostBack('RightPanel1$Calendar','9661')" style="color:Black" title="June 14">14</a></font></td><td align="center" width="14%"><font size="2"><a href="javascript:__doPostBack('RightPanel1$Calendar','9662')" style="color:Black" title="June 15">15</a></font></td><td align="center" width="14%"><font size="2"><a href="javascript:__doPostBack('RightPanel1$Calendar','9663')" style="color:Black" title="June 16">16</a></font></td><td align="center" width="14%"><font size="2"><a href="javascript:__doPostBack('RightPanel1$Calendar','9664')" style="color:Black" title="June 17">17</a></font></td><td align="center" width="14%"><font size="2"><a href="javascript:__doPostBack('RightPanel1$Calendar','9665')" style="color:Black" title="June 18">18</a></font></td><td align="center" width="14%"><font size="2"><a href="javascript:__doPostBack('RightPanel1$Calendar','9666')" style="color:Black" title="June 19">19</a></font></td><td align="center" width="14%"><font size="2"><a href="javascript:__doPostBack('RightPanel1$Calendar','9667')" style="color:Black" title="June 20">20</a></font></td></tr><tr><td align="center" width="14%"><font size="2"><a href="javascript:__doPostBack('RightPanel1$Calendar','9668')" style="color:Black" title="June 21">21</a></font></td><td align="center" width="14%"><font size="2"><a href="javascript:__doPostBack('RightPanel1$Calendar','9669')" style="color:Black" title="June 22">22</a></font></td><td align="center" width="14%"><font size="2"><a href="javascript:__doPostBack('RightPanel1$Calendar','9670')" style="color:Black" title="June 23">23</a></font></td><td align="center" width="14%"><font size="2"><a href="javascript:__doPostBack('RightPanel1$Calendar','9671')" style="color:Black" title="June 24">24</a></font></td><td align="center" width="14%"><font size="2"><a href="javascript:__doPostBack('RightPanel1$Calendar','9672')" style="color:Black" title="June 25">25</a></font></td><td align="center" width="14%"><font size="2"><a href="javascript:__doPostBack('RightPanel1$Calendar','9673')" style="coLine truncated
</table><BR>
<a href="rssFeed.aspx">Get RSS feed</a>
</TD>
</TR>
<TR>
<TD colSpan="3"></TD>
</TR>
</TABLE>
</form>
</body>
<div style="background-color:lightgray;width:40%;margin:auto;position:absolute;left:30%;bottom:2px;text-align:center;font-size:12px;padding:1px">
<p style="padding-left:5%;padding-right:5%"><b>Warning</b>: This is not a blog. This is a test site for Acunetix. It is vulnerable to SQL Injections, Cross-site Scripting (XSS), and more. It was built using ASP.NET and it shows how bad programming leads to vulnerabilities. Do not visit the links in the comments. They are posted by malicious parties who are trying to exploit this site to their advantage. Comments are purged daily.</p>
</div>
</HTML>