ZAP Scanning Report

Generated with ZAP on Wed 6 Jul 2022, at 21:23:58

Contents

About this report

Report parameters

Contexts

No contexts were selected, so all contexts were included by default.

Sites

The following sites were included:

  • https://192.168.2.1

(If no sites were selected, all sites were included by default.)

An included site must also be within one of the included contexts for its data to be included in the report.

Risk levels

Included: High, Medium, Low, Informational

Excluded: None

Confidence levels

Included: User Confirmed, High, Medium, Low

Excluded: User Confirmed, High, Medium, Low, False Positive

Summaries

Alert counts by risk and confidence

This table shows the number of alerts for each level of risk and confidence included in the report.

(The percentages in brackets represent the count as a percentage of the total number of alerts included in the report, rounded to one decimal place.)

Confidence
User Confirmed High Medium Low Total
Risk High 0
(0.0%)
0
(0.0%)
0
(0.0%)
0
(0.0%)
0
(0.0%)
Medium 0
(0.0%)
1
(25.0%)
0
(0.0%)
0
(0.0%)
1
(25.0%)
Low 0
(0.0%)
0
(0.0%)
1
(25.0%)
1
(25.0%)
2
(50.0%)
Informational 0
(0.0%)
0
(0.0%)
0
(0.0%)
1
(25.0%)
1
(25.0%)
Total 0
(0.0%)
1
(25.0%)
1
(25.0%)
2
(50.0%)
4
(100%)

Alert counts by site and risk

This table shows, for each site for which one or more alerts were raised, the number of alerts raised at each risk level.

Alerts with a confidence level of "False Positive" have been excluded from these counts.

(The numbers in brackets are the number of alerts raised for the site at or above that risk level.)

Risk
High
(= High)
Medium
(>= Medium)
Low
(>= Low)
Informational
(>= Informational)
Site https://192.168.2.1 0
(0)
1
(1)
2
(3)
1
(4)

Alert counts by alert type

This table shows the number of alerts of each alert type, together with the alert type's risk level.

(The percentages in brackets represent each count as a percentage, rounded to one decimal place, of the total number of alerts included in this report.)

Alert type Risk Count
Content Security Policy (CSP) Header Not Set Medium 2
(50.0%)
Cookie without SameSite Attribute Low 2
(50.0%)
Timestamp Disclosure - Unix Low 6
(150.0%)
Information Disclosure - Suspicious Comments Informational 6
(150.0%)
Total 4

Alerts

  1. Risk=Medium, Confidence=High (1)

    1. https://192.168.2.1 (1)

      1. Content Security Policy (CSP) Header Not Set (1)
        1. GET https://192.168.2.1/
          Alert tags
          Alert description

          Content Security Policy (CSP) is an added layer of security that helps to detect and mitigate certain types of attacks, including Cross Site Scripting (XSS) and data injection attacks. These attacks are used for everything from data theft to site defacement or distribution of malware. CSP provides a set of standard HTTP headers that allow website owners to declare approved sources of content that browsers should be allowed to load on that page — covered types are JavaScript, CSS, HTML frames, fonts, images and embeddable objects such as Java applets, ActiveX, audio and video files.

          Request
          Request line and header section (403 bytes)
          GET https://192.168.2.1/ HTTP/1.1
          Host: 192.168.2.1
          User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Firefox/91.0
          Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
          Accept-Language: en-US,en;q=0.5
          Connection: keep-alive
          Upgrade-Insecure-Requests: 1
          Sec-Fetch-Dest: document
          Sec-Fetch-Mode: navigate
          Sec-Fetch-Site: none
          Sec-Fetch-User: ?1
          
          
          Request body (0 bytes)
          Response
          Status line and header section (480 bytes)
          HTTP/1.1 200 OK
          Server: nginx
          Date: Wed, 06 Jul 2022 22:59:55 GMT
          Content-Type: text/html; charset=UTF-8
          Connection: keep-alive
          X-Frame-Options: SAMEORIGIN
          Last-Modified: Wed, 06 Jul 2022 22:59:55 GMT
          Set-Cookie: PHPSESSID=5492fdfed18d9292d14a1f7b53be5a55; path=/; secure; HttpOnly
          Expires: Thu, 19 Nov 1981 08:52:00 GMT
          Cache-Control: no-store, no-cache, must-revalidate
          Pragma: no-cache
          Strict-Transport-Security: max-age=31536000
          X-Content-Type-Options: nosniff
          
          
          Response body (9373 bytes)
          <!DOCTYPE html>
          <html lang="en">
          	<head>
          		<meta name="viewport" content="width=device-width, initial-scale=1">
          	    <link rel="stylesheet" href="/vendor/bootstrap/css/bootstrap.min.css" type="text/css">
          	    <link rel="stylesheet" href="/css/login.css?v=1643658823" type="text/css">
          		<title>pfSense - Login</title>
          		<script type="text/javascript">
          			//<![CDATA{
          			var events = events || [];
          			//]]>
          		</script>
          	<script type="text/javascript">if (top != self) {top.location.href = self.location.href;}</script><script type="text/javascript">var csrfMagicToken = "sid:13526c6fb9f534a084b9038580fd85e288b1c75e,1657148395;ip:100a6ee99f3ef6f751d1824387eb1f8c0347c73b,1657148395";var csrfMagicName = "__csrf_magic";</script><script src="/csrf/csrf-magic.js" type="text/javascript"></script></head>
          
          	<body id="login" >
          		<div id="total">
          			<header>
          				<div id="headerrow">
          					<div class="row">
          						<!-- Header left logo box -->
          						<div class="col-sm-4">
          							<div id="logodiv" style="text-align:center" class="nowarning">
          								<svg id="logo" role="img" aria-labelledby="pfsense-logo" x="0px" y="0px" viewBox="0 0 282.8 84.2">
          	<title id="pfsense-logo-svg">pfSense Logo</title>
          	<path class="logo-st0" d="M27.8,57.7c2.9,0,5.4-0.9,7.5-2.6c2.1-1.7,3.6-4,4.4-6.8c0.8-2.8,0.6-5.1-0.5-6.8c-1.1-1.7-3.2-2.6-6.1-2.6 c-2.9,0-5.4,0.9-7.5,2.6c-2.1,1.7-3.5,4-4.3,6.8c-0.8,2.8-0.7,5.1,0.5,6.8C22.8,56.9,24.8,57.7,27.8,57.7"/>
          	<path class="logo-st0" d="M115.1,46.6c-1.5-0.8-3-1.4-4.7-1.8c-1.7-0.4-3.2-0.7-4.7-1.1c-1.5-0.3-2.7-0.7-3.6-1.1c-0.9-0.4-1.4-1.1-1.4-2 c0-1.1,0.5-1.9,1.4-2.4c0.9-0.5,1.9-0.7,2.8-0.7c2.8,0,5,1,6.7,3.1l7-7c-1.7-1.8-3.9-3.1-6.4-3.8c-2.5-0.7-5-1.1-7.4-1.1 c-1.9,0-3.9,0.2-5.7,0.7c-1.9,0.5-3.6,1.2-5,2.3c-1.5,1-2.6,2.3-3.5,3.9c-0.9,1.6-1.3,3.5-1.3,5.7c0,2.3,0.5,4.2,1.4,5.6 c0.9,1.4,2.1,2.5,3.6,3.3c1.5,0.8,3,1.3,4.7,1.7c1.7,0.4,3.2,0.7,4.7,1.1c1.5,0.3,2.7,0.7,3.6,1.2c0.9,0.5,1.4,1.2,1.4,2.2 c0,1-0.5,1.7-1.6,2.1c-1.1,0.4-2.3,0.6-3.6,0.6c-1.7,0-3.3-0.3-4.6-1c-1.3-0.7-2.5-1.7-3.6-3l-7,7.7c1.8,1.9,4.1,3.2,6.7,3.9 c2.7,0.7,5.3,1.1,7.9,1.1c2,0,4-0.2,6.1-0.6c2-0.4,3.9-1,5.5-2c1.6-0.9,3-2.2,4-3.8c1-1.6,1.6-3.5,1.6-5.9c0-2.3-0.5-4.2-1.4-5.6 C117.7,48.6,116.5,47.4,115.1,46.6"/>
          	<path class="logo-st0" d="M156.3,34.1c-1.5-1.7-3.3-3-5.5-3.9c-2.2-0.9-4.6-1.4-7.2-1.4c-2.9,0-5.6,0.5-8.1,1.4c-2.5,0.9-4.7,2.2-6.6,3.9 c-1.9,1.7-3.3,3.8-4.4,6.2c-1.1,2.4-1.6,5.1-1.6,8c0,3,0.5,5.6,1.6,8c1.1,2.4,2.5,4.5,4.4,6.2c1.9,1.7,4.1,3,6.6,3.9 c2.5,0.9,5.2,1.4,8.1,1.4c3,0,5.9-0.6,8.7-1.9c2.8-1.3,5.1-3.1,7-5.4l-8-5.9c-1,1.3-2.1,2.4-3.4,3.3c-1.3,0.8-2.9,1.3-4.8,1.3 c-2.2,0-4.1-0.7-5.7-2c-1.5-1.3-2.5-3.1-3-5.2H161v-3.6c0-3-0.4-5.6-1.2-8C159,37.9,157.8,35.8,156.3,34.1 M134.3,44.1 c0.1-0.9,0.3-1.8,0.7-2.6c0.4-0.8,0.9-1.6,1.6-2.2c0.7-0.6,1.5-1.2,2.5-1.6c1-0.4,2.1-0.6,3.4-0.6c2.1,0,3.8,0.7,5.1,2.1 c1.3,1.4,2,3,1.9,5H134.3z"/>
          	<path class="logo-st0" d="M198.3,33.8c-1-1.6-2.4-2.8-4.2-3.7c-1.8-0.9-4.1-1.3-7-1.3c-1.4,0-2.7,0.2-3.8,0.5c-1.2,0.4-2.2,0.8-3.1,1.4 c-0.9,0.6-1.7,1.2-2.4,1.9c-0.7,0.7-1.2,1.4-1.5,2.1H176v-5.1h-11v37.2h11.5V48.4c0-1.2,0.1-2.4,0.2-3.5c0.2-1.1,0.5-2.1,1-3 c0.5-0.9,1.2-1.6,2.1-2.1c0.9-0.5,2.1-0.8,3.6-0.8c1.5,0,2.6,0.3,3.4,0.9c0.8,0.6,1.4,1.4,1.8,2.4c0.4,1,0.6,2,0.7,3.2 c0.1,1.1,0.1,2.3,0.1,3.3v18.2h11.5V46.4c0-2.5-0.2-4.8-0.5-7C199.9,37.3,199.3,35.4,198.3,33.8"/>
          	<path class="logo-st0" d="M231.5,46.6c-1.5-0.8-3-1.4-4.7-1.8c-1.7-0.4-3.2-0.7-4.7-1.1c-1.5-0.3-2.7-0.7-3.6-1.1c-0.9-0.4-1.4-1.1-1.4-2 c0-1.1,0.5-1.9,1.4-2.4c0.9-0.5,1.9-0.7,2.8-0.7c2.8,0,5,1,6.7,3.1l7-7c-1.7-1.8-3.9-3.1-6.4-3.8c-2.5-0.7-5-1.1-7.4-1.1 c-1.9,0-3.9,0.2-5.7,0.7c-1.9,0.5-3.6,1.2-5,2.3c-1.5,1-2.6,2.3-3.5,3.9c-0.9,1.6-1.3,3.5-1.3,5.7c0,2.3,0.5,4.2,1.4,5.6 c0.9,1.4,2.1,2.5,3.6,3.3c1.5,0.8,3,1.3,4.7,1.7c1.7,0.4,3.2,0.7,4.7,1.1c1.5,0.3,2.7,0.7,3.6,1.2c0.9,0.5,1.4,1.2,1.4,2.2 c0,1-0.5,1.7-1.6,2.1c-1.1,0.4-2.3,0.6-3.6,0.6c-1.7,0-3.3-0.3-4.6-1c-1.3-0.7-2.5-1.7-3.6-3l-7,7.7c1.8,1.9,4.1,3.2,6.7,3.9 c2.7,0.7,5.3,1.1,7.9,1.1c2,0,4-0.2,6.1-0.6c2-0.4,3.9-1,5.5-2c1.6-0.9,3-2.2,4-3.8c1-1.6,1.6-3.5,1.6-5.9c0-2.3-0.5-4.2-1.4-5.6 C234.1,48.6,232.9,47.4,231.5,46.6"/>
          	<path class="logo-st0" d="M277.4,51.9v-4.2c-0.1-2.7-0.5-5.2-1.2-7.4c-0.8-2.4-2-4.5-3.5-6.2c-1.5-1.7-3.3-3-5.5-3.9 c-2.2-0.9-4.6-1.4-7.2-1.4c-2.9,0-5.6,0.5-8.1,1.4c-2.5,0.9-4.7,2.2-6.6,3.9c-1.9,1.7-3.3,3.8-4.4,6.2c-1.1,2.4-1.6,5.1-1.6,8 c0,3,0.5,5.6,1.6,8c1.1,2.4,2.5,4.5,4.4,6.2c1.9,1.7,4.1,3,6.6,3.9c2.5,0.9,5.2,1.4,8.1,1.4c3,0,5.9-0.6,8.7-1.9 c2.8-1.3,5.1-3.1,7-5.4l-8-5.9c-1,1.3-2.1,2.4-3.4,3.3c-1.3,0.8-2.9,1.3-4.8,1.3c-2.2,0-4.1-0.7-5.7-2c-1.5-1.3-2.5-3.1-3-5.2H277.4 z M250.7,44.1c0.1-0.9,0.3-1.8,0.7-2.6c0.4-0.8,0.9-1.6,1.6-2.2c0.7-0.6,1.5-1.2,2.5-1.6c1-0.4,2.1-0.6,3.4-0.6 c2.1,0,3.8,0.7,5.1,2.1c1.3,1.4,2,3,1.9,5H250.7z"/>
          	<path class="logo-st1" d="M52.6,38.9l2.6-9.2h4.6l1.8-6.6c0.6-2,1.3-4,2.2-5.8c0.8-1.8,2-3.4,3.4-4.8c1.4-1.4,3.2-2.5,5.3-3.3 c2.1-0.8,4.8-1.2,7.9-1.2c0.8,0,1.5,0,2.3,0.1c-0.7-2.9-3.3-5-6.3-5.1H11.9c-3.6,0-6.5,3-6.5,6.6V67l10.5-37.3h10.6l-1.4,4.9h0.2 c0.6-0.7,1.4-1.3,2.4-2c1-0.7,2-1.3,3.1-1.9c1.1-0.6,2.3-1,3.6-1.4c1.3-0.4,2.6-0.5,3.9-0.5c2.8,0,5.1,0.5,7.1,1.4 c2,0.9,3.5,2.3,4.7,4c1,1.5,1.6,3.3,1.9,5.4l0.8-0.6H52.6z"/>
          	<path class="logo-st2" d="M82.1,17.9c-0.5-0.1-1.1-0.2-1.8-0.2c-1.8,0-3.3,0.4-4.5,1.2c-1.1,0.8-2.1,2.4-2.8,4.9l-1.7,5.9h6.5l1.6,5.1 l-4.2,4.1h-6.5l-7.9,28H49.4l7.9-28h-4.4L52,39.5c0,0.2,0.1,0.5,0.1,0.7c0.2,2.3-0.1,4.9-0.9,7.7c-0.7,2.6-1.8,5.1-3.3,7.5 c-1.5,2.4-3.2,4.5-5.1,6.3c-2,1.8-4.2,3.3-6.6,4.4c-2.4,1.1-4.9,1.6-7.6,1.6c-2.4,0-4.5-0.4-6.4-1.1c-1.9-0.7-3.2-2-4-3.8h-0.2 l-5,17.7h63.3c3.6,0,6.6-2.9,6.6-6.6V18.2C82.6,18.1,82.3,18,82.1,17.9"/>
          	<path class="logo-st0" d="M277.6,68.5h0.8c0.4,0,0.6-0.1,0.7-0.2c0.1-0.1,0.2-0.2,0.2-0.4c0-0.1,0-0.2-0.1-0.3c-0.1-0.1-0.1-0.2-0.3-0.2 c-0.1,0-0.3-0.1-0.6-0.1h-0.7V68.5z M277,70.6v-3.8h1.3c0.5,0,0.8,0,1,0.1c0.2,0.1,0.4,0.2,0.5,0.4c0.1,0.2,0.2,0.4,0.2,0.6 c0,0.3-0.1,0.5-0.3,0.7c-0.2,0.2-0.5,0.3-0.8,0.3c0.1,0.1,0.2,0.1,0.3,0.2c0.2,0.2,0.3,0.4,0.6,0.8l0.5,0.7h-0.8l-0.3-0.6 c-0.3-0.5-0.5-0.8-0.6-0.9c-0.1-0.1-0.3-0.1-0.5-0.1h-0.4v1.6H277z M278.6,65.7c-0.5,0-1,0.1-1.5,0.4c-0.5,0.3-0.8,0.6-1.1,1.1 c-0.3,0.5-0.4,1-0.4,1.5c0,0.5,0.1,1,0.4,1.5c0.3,0.5,0.6,0.8,1.1,1.1c0.5,0.3,1,0.4,1.5,0.4c0.5,0,1-0.1,1.5-0.4 c0.5-0.3,0.8-0.6,1.1-1.1c0.3-0.5,0.4-1,0.4-1.5c0-0.5-0.1-1-0.4-1.5c-0.3-0.5-0.6-0.8-1.1-1.1C279.6,65.8,279.1,65.7,278.6,65.7z M278.6,65.1c0.6,0,1.2,0.2,1.8,0.5c0.6,0.3,1,0.7,1.3,1.3c0.3,0.6,0.5,1.2,0.5,1.8c0,0.6-0.2,1.2-0.5,1.8c-0.3,0.6-0.8,1-1.3,1.3 c-0.6,0.3-1.2,0.5-1.8,0.5c-0.6,0-1.2-0.2-1.8-0.5c-0.6-0.3-1-0.8-1.3-1.3c-0.3-0.6-0.5-1.2-0.5-1.8c0-0.6,0.2-1.2,0.5-1.8 c0.3-0.6,0.8-1,1.3-1.3C277.4,65.2,278,65.1,278.6,65.1z"/>
          </svg>
          							</div>
          						</div>
          
          						<!-- Header center message box -->
          						<div class="col-sm-4 nowarning msgbox text-center text-danger">
          						</div>
          
          						<!-- Header right message box (hostname or msg)-->
          						<div class="col-sm-4 nowarning msgbox text-center">
          							<span id="hostspan">
          								<a><h4>Login to pfSense</h4></a>
          							</span>
          						</div>
          					</div>
          	            </div>
          	        </header>
          
          	        <div style="background: #1e3f75;" class="pagebody">
          	        	<div class="col-sm-4"></div>
          
          	        	<div class="col-sm-4 offset-md-4 logoCol">
          					<div class="loginCont center-block">
          		                <form method="post"  class="login"><input type='hidden' name='__csrf_magic' value="sid:13526c6fb9f534a084b9038580fd85e288b1c75e,1657148395;ip:100a6ee99f3ef6f751d1824387eb1f8c0347c73b,1657148395" />
          			                <p class="form-title">Sign In</p>
          			                <input name="usernamefld" id="usernamefld" type="text" placeholder="Username" autocorrect="off" autocapitalize="none"/>
          			                <input name="passwordfld" id="passwordfld" type="password" placeholder="Password" />
          			                <input type="submit" name="login" value="Sign In" class="btn btn-success btn-sm" />
          		                </form>
          					</div>
          	            </div>
          
          	        	<div class="col-sm-4"></div>
          	        </div>
          
          	        <footer id="3">
          	            <div id="footertext">
          					<p class="text-muted">
          						<a target="_blank" href="https://pfsense.org">pfSense</a> is developed and maintained by <a target="_blank" href="https://netgate.com">Netgate. </a> &copy; ESF 2004 - 2022<a target="_blank" href="https://pfsense.org/license"> View license.</a>					</p>
          	            </div>
          	        </footer>
          	    </div>
          
          		<script type="text/javascript">
          		//<![CDATA[
          			/* Prevent duplicate submission  */
          			events.push(function() {
          				var submitted = false;
          
          				$(form).submit(function(e){
          					if (submitted) {
          						e.preventDefault();
          					} else {
          						submitted = true;
          						// Form is submitted because default action is not prevented
          					}
          				});
          			});
          		//]]>
          		</script>
          
          	    <script src="/vendor/jquery/jquery-3.5.1.min.js?v=1643658823"></script>
          		<script src="/vendor/bootstrap/js/bootstrap.min.js?v=1643658823"></script>
          		<script src="/js/pfSense.js?v=1643658823"></script>
          
          		<script type="text/javascript">
          		//!<[CDATA[
          		events.push(function() {
          			document.cookie=
          				"cookie_test=1" +
          				"; secure";
          
          			if (document.cookie.indexOf("cookie_test") == -1) {
          				alert("The browser must support cookies to login.");
          			}
          
          			// Delete it
          			document.cookie = "cookie_test=1; expires=Thu, 01-Jan-1970 00:00:01 GMT";
          		});
          		//]]>
          		</script>
          
          	<script type="text/javascript">CsrfMagic.end();</script></body>
          </html>
          
          
          Solution

          Ensure that your web server, application server, load balancer, etc. is configured to set the Content-Security-Policy header, to achieve optimal browser support: "Content-Security-Policy" for Chrome 25+, Firefox 23+ and Safari 7+, "X-Content-Security-Policy" for Firefox 4.0+ and Internet Explorer 10+, and "X-WebKit-CSP" for Chrome 14+ and Safari 6+.

  2. Risk=Low, Confidence=Medium (1)

    1. https://192.168.2.1 (1)

      1. Cookie without SameSite Attribute (1)
        1. GET https://192.168.2.1/
          Alert tags
          Alert description

          A cookie has been set without the SameSite attribute, which means that the cookie can be sent as a result of a 'cross-site' request. The SameSite attribute is an effective counter measure to cross-site request forgery, cross-site script inclusion, and timing attacks.

          Request
          Request line and header section (403 bytes)
          GET https://192.168.2.1/ HTTP/1.1
          Host: 192.168.2.1
          User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Firefox/91.0
          Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
          Accept-Language: en-US,en;q=0.5
          Connection: keep-alive
          Upgrade-Insecure-Requests: 1
          Sec-Fetch-Dest: document
          Sec-Fetch-Mode: navigate
          Sec-Fetch-Site: none
          Sec-Fetch-User: ?1
          
          
          Request body (0 bytes)
          Response
          Status line and header section (480 bytes)
          HTTP/1.1 200 OK
          Server: nginx
          Date: Wed, 06 Jul 2022 22:59:55 GMT
          Content-Type: text/html; charset=UTF-8
          Connection: keep-alive
          X-Frame-Options: SAMEORIGIN
          Last-Modified: Wed, 06 Jul 2022 22:59:55 GMT
          Set-Cookie: PHPSESSID=5492fdfed18d9292d14a1f7b53be5a55; path=/; secure; HttpOnly
          Expires: Thu, 19 Nov 1981 08:52:00 GMT
          Cache-Control: no-store, no-cache, must-revalidate
          Pragma: no-cache
          Strict-Transport-Security: max-age=31536000
          X-Content-Type-Options: nosniff
          
          
          Response body (9373 bytes)
          <!DOCTYPE html>
          <html lang="en">
          	<head>
          		<meta name="viewport" content="width=device-width, initial-scale=1">
          	    <link rel="stylesheet" href="/vendor/bootstrap/css/bootstrap.min.css" type="text/css">
          	    <link rel="stylesheet" href="/css/login.css?v=1643658823" type="text/css">
          		<title>pfSense - Login</title>
          		<script type="text/javascript">
          			//<![CDATA{
          			var events = events || [];
          			//]]>
          		</script>
          	<script type="text/javascript">if (top != self) {top.location.href = self.location.href;}</script><script type="text/javascript">var csrfMagicToken = "sid:13526c6fb9f534a084b9038580fd85e288b1c75e,1657148395;ip:100a6ee99f3ef6f751d1824387eb1f8c0347c73b,1657148395";var csrfMagicName = "__csrf_magic";</script><script src="/csrf/csrf-magic.js" type="text/javascript"></script></head>
          
          	<body id="login" >
          		<div id="total">
          			<header>
          				<div id="headerrow">
          					<div class="row">
          						<!-- Header left logo box -->
          						<div class="col-sm-4">
          							<div id="logodiv" style="text-align:center" class="nowarning">
          								<svg id="logo" role="img" aria-labelledby="pfsense-logo" x="0px" y="0px" viewBox="0 0 282.8 84.2">
          	<title id="pfsense-logo-svg">pfSense Logo</title>
          	<path class="logo-st0" d="M27.8,57.7c2.9,0,5.4-0.9,7.5-2.6c2.1-1.7,3.6-4,4.4-6.8c0.8-2.8,0.6-5.1-0.5-6.8c-1.1-1.7-3.2-2.6-6.1-2.6 c-2.9,0-5.4,0.9-7.5,2.6c-2.1,1.7-3.5,4-4.3,6.8c-0.8,2.8-0.7,5.1,0.5,6.8C22.8,56.9,24.8,57.7,27.8,57.7"/>
          	<path class="logo-st0" d="M115.1,46.6c-1.5-0.8-3-1.4-4.7-1.8c-1.7-0.4-3.2-0.7-4.7-1.1c-1.5-0.3-2.7-0.7-3.6-1.1c-0.9-0.4-1.4-1.1-1.4-2 c0-1.1,0.5-1.9,1.4-2.4c0.9-0.5,1.9-0.7,2.8-0.7c2.8,0,5,1,6.7,3.1l7-7c-1.7-1.8-3.9-3.1-6.4-3.8c-2.5-0.7-5-1.1-7.4-1.1 c-1.9,0-3.9,0.2-5.7,0.7c-1.9,0.5-3.6,1.2-5,2.3c-1.5,1-2.6,2.3-3.5,3.9c-0.9,1.6-1.3,3.5-1.3,5.7c0,2.3,0.5,4.2,1.4,5.6 c0.9,1.4,2.1,2.5,3.6,3.3c1.5,0.8,3,1.3,4.7,1.7c1.7,0.4,3.2,0.7,4.7,1.1c1.5,0.3,2.7,0.7,3.6,1.2c0.9,0.5,1.4,1.2,1.4,2.2 c0,1-0.5,1.7-1.6,2.1c-1.1,0.4-2.3,0.6-3.6,0.6c-1.7,0-3.3-0.3-4.6-1c-1.3-0.7-2.5-1.7-3.6-3l-7,7.7c1.8,1.9,4.1,3.2,6.7,3.9 c2.7,0.7,5.3,1.1,7.9,1.1c2,0,4-0.2,6.1-0.6c2-0.4,3.9-1,5.5-2c1.6-0.9,3-2.2,4-3.8c1-1.6,1.6-3.5,1.6-5.9c0-2.3-0.5-4.2-1.4-5.6 C117.7,48.6,116.5,47.4,115.1,46.6"/>
          	<path class="logo-st0" d="M156.3,34.1c-1.5-1.7-3.3-3-5.5-3.9c-2.2-0.9-4.6-1.4-7.2-1.4c-2.9,0-5.6,0.5-8.1,1.4c-2.5,0.9-4.7,2.2-6.6,3.9 c-1.9,1.7-3.3,3.8-4.4,6.2c-1.1,2.4-1.6,5.1-1.6,8c0,3,0.5,5.6,1.6,8c1.1,2.4,2.5,4.5,4.4,6.2c1.9,1.7,4.1,3,6.6,3.9 c2.5,0.9,5.2,1.4,8.1,1.4c3,0,5.9-0.6,8.7-1.9c2.8-1.3,5.1-3.1,7-5.4l-8-5.9c-1,1.3-2.1,2.4-3.4,3.3c-1.3,0.8-2.9,1.3-4.8,1.3 c-2.2,0-4.1-0.7-5.7-2c-1.5-1.3-2.5-3.1-3-5.2H161v-3.6c0-3-0.4-5.6-1.2-8C159,37.9,157.8,35.8,156.3,34.1 M134.3,44.1 c0.1-0.9,0.3-1.8,0.7-2.6c0.4-0.8,0.9-1.6,1.6-2.2c0.7-0.6,1.5-1.2,2.5-1.6c1-0.4,2.1-0.6,3.4-0.6c2.1,0,3.8,0.7,5.1,2.1 c1.3,1.4,2,3,1.9,5H134.3z"/>
          	<path class="logo-st0" d="M198.3,33.8c-1-1.6-2.4-2.8-4.2-3.7c-1.8-0.9-4.1-1.3-7-1.3c-1.4,0-2.7,0.2-3.8,0.5c-1.2,0.4-2.2,0.8-3.1,1.4 c-0.9,0.6-1.7,1.2-2.4,1.9c-0.7,0.7-1.2,1.4-1.5,2.1H176v-5.1h-11v37.2h11.5V48.4c0-1.2,0.1-2.4,0.2-3.5c0.2-1.1,0.5-2.1,1-3 c0.5-0.9,1.2-1.6,2.1-2.1c0.9-0.5,2.1-0.8,3.6-0.8c1.5,0,2.6,0.3,3.4,0.9c0.8,0.6,1.4,1.4,1.8,2.4c0.4,1,0.6,2,0.7,3.2 c0.1,1.1,0.1,2.3,0.1,3.3v18.2h11.5V46.4c0-2.5-0.2-4.8-0.5-7C199.9,37.3,199.3,35.4,198.3,33.8"/>
          	<path class="logo-st0" d="M231.5,46.6c-1.5-0.8-3-1.4-4.7-1.8c-1.7-0.4-3.2-0.7-4.7-1.1c-1.5-0.3-2.7-0.7-3.6-1.1c-0.9-0.4-1.4-1.1-1.4-2 c0-1.1,0.5-1.9,1.4-2.4c0.9-0.5,1.9-0.7,2.8-0.7c2.8,0,5,1,6.7,3.1l7-7c-1.7-1.8-3.9-3.1-6.4-3.8c-2.5-0.7-5-1.1-7.4-1.1 c-1.9,0-3.9,0.2-5.7,0.7c-1.9,0.5-3.6,1.2-5,2.3c-1.5,1-2.6,2.3-3.5,3.9c-0.9,1.6-1.3,3.5-1.3,5.7c0,2.3,0.5,4.2,1.4,5.6 c0.9,1.4,2.1,2.5,3.6,3.3c1.5,0.8,3,1.3,4.7,1.7c1.7,0.4,3.2,0.7,4.7,1.1c1.5,0.3,2.7,0.7,3.6,1.2c0.9,0.5,1.4,1.2,1.4,2.2 c0,1-0.5,1.7-1.6,2.1c-1.1,0.4-2.3,0.6-3.6,0.6c-1.7,0-3.3-0.3-4.6-1c-1.3-0.7-2.5-1.7-3.6-3l-7,7.7c1.8,1.9,4.1,3.2,6.7,3.9 c2.7,0.7,5.3,1.1,7.9,1.1c2,0,4-0.2,6.1-0.6c2-0.4,3.9-1,5.5-2c1.6-0.9,3-2.2,4-3.8c1-1.6,1.6-3.5,1.6-5.9c0-2.3-0.5-4.2-1.4-5.6 C234.1,48.6,232.9,47.4,231.5,46.6"/>
          	<path class="logo-st0" d="M277.4,51.9v-4.2c-0.1-2.7-0.5-5.2-1.2-7.4c-0.8-2.4-2-4.5-3.5-6.2c-1.5-1.7-3.3-3-5.5-3.9 c-2.2-0.9-4.6-1.4-7.2-1.4c-2.9,0-5.6,0.5-8.1,1.4c-2.5,0.9-4.7,2.2-6.6,3.9c-1.9,1.7-3.3,3.8-4.4,6.2c-1.1,2.4-1.6,5.1-1.6,8 c0,3,0.5,5.6,1.6,8c1.1,2.4,2.5,4.5,4.4,6.2c1.9,1.7,4.1,3,6.6,3.9c2.5,0.9,5.2,1.4,8.1,1.4c3,0,5.9-0.6,8.7-1.9 c2.8-1.3,5.1-3.1,7-5.4l-8-5.9c-1,1.3-2.1,2.4-3.4,3.3c-1.3,0.8-2.9,1.3-4.8,1.3c-2.2,0-4.1-0.7-5.7-2c-1.5-1.3-2.5-3.1-3-5.2H277.4 z M250.7,44.1c0.1-0.9,0.3-1.8,0.7-2.6c0.4-0.8,0.9-1.6,1.6-2.2c0.7-0.6,1.5-1.2,2.5-1.6c1-0.4,2.1-0.6,3.4-0.6 c2.1,0,3.8,0.7,5.1,2.1c1.3,1.4,2,3,1.9,5H250.7z"/>
          	<path class="logo-st1" d="M52.6,38.9l2.6-9.2h4.6l1.8-6.6c0.6-2,1.3-4,2.2-5.8c0.8-1.8,2-3.4,3.4-4.8c1.4-1.4,3.2-2.5,5.3-3.3 c2.1-0.8,4.8-1.2,7.9-1.2c0.8,0,1.5,0,2.3,0.1c-0.7-2.9-3.3-5-6.3-5.1H11.9c-3.6,0-6.5,3-6.5,6.6V67l10.5-37.3h10.6l-1.4,4.9h0.2 c0.6-0.7,1.4-1.3,2.4-2c1-0.7,2-1.3,3.1-1.9c1.1-0.6,2.3-1,3.6-1.4c1.3-0.4,2.6-0.5,3.9-0.5c2.8,0,5.1,0.5,7.1,1.4 c2,0.9,3.5,2.3,4.7,4c1,1.5,1.6,3.3,1.9,5.4l0.8-0.6H52.6z"/>
          	<path class="logo-st2" d="M82.1,17.9c-0.5-0.1-1.1-0.2-1.8-0.2c-1.8,0-3.3,0.4-4.5,1.2c-1.1,0.8-2.1,2.4-2.8,4.9l-1.7,5.9h6.5l1.6,5.1 l-4.2,4.1h-6.5l-7.9,28H49.4l7.9-28h-4.4L52,39.5c0,0.2,0.1,0.5,0.1,0.7c0.2,2.3-0.1,4.9-0.9,7.7c-0.7,2.6-1.8,5.1-3.3,7.5 c-1.5,2.4-3.2,4.5-5.1,6.3c-2,1.8-4.2,3.3-6.6,4.4c-2.4,1.1-4.9,1.6-7.6,1.6c-2.4,0-4.5-0.4-6.4-1.1c-1.9-0.7-3.2-2-4-3.8h-0.2 l-5,17.7h63.3c3.6,0,6.6-2.9,6.6-6.6V18.2C82.6,18.1,82.3,18,82.1,17.9"/>
          	<path class="logo-st0" d="M277.6,68.5h0.8c0.4,0,0.6-0.1,0.7-0.2c0.1-0.1,0.2-0.2,0.2-0.4c0-0.1,0-0.2-0.1-0.3c-0.1-0.1-0.1-0.2-0.3-0.2 c-0.1,0-0.3-0.1-0.6-0.1h-0.7V68.5z M277,70.6v-3.8h1.3c0.5,0,0.8,0,1,0.1c0.2,0.1,0.4,0.2,0.5,0.4c0.1,0.2,0.2,0.4,0.2,0.6 c0,0.3-0.1,0.5-0.3,0.7c-0.2,0.2-0.5,0.3-0.8,0.3c0.1,0.1,0.2,0.1,0.3,0.2c0.2,0.2,0.3,0.4,0.6,0.8l0.5,0.7h-0.8l-0.3-0.6 c-0.3-0.5-0.5-0.8-0.6-0.9c-0.1-0.1-0.3-0.1-0.5-0.1h-0.4v1.6H277z M278.6,65.7c-0.5,0-1,0.1-1.5,0.4c-0.5,0.3-0.8,0.6-1.1,1.1 c-0.3,0.5-0.4,1-0.4,1.5c0,0.5,0.1,1,0.4,1.5c0.3,0.5,0.6,0.8,1.1,1.1c0.5,0.3,1,0.4,1.5,0.4c0.5,0,1-0.1,1.5-0.4 c0.5-0.3,0.8-0.6,1.1-1.1c0.3-0.5,0.4-1,0.4-1.5c0-0.5-0.1-1-0.4-1.5c-0.3-0.5-0.6-0.8-1.1-1.1C279.6,65.8,279.1,65.7,278.6,65.7z M278.6,65.1c0.6,0,1.2,0.2,1.8,0.5c0.6,0.3,1,0.7,1.3,1.3c0.3,0.6,0.5,1.2,0.5,1.8c0,0.6-0.2,1.2-0.5,1.8c-0.3,0.6-0.8,1-1.3,1.3 c-0.6,0.3-1.2,0.5-1.8,0.5c-0.6,0-1.2-0.2-1.8-0.5c-0.6-0.3-1-0.8-1.3-1.3c-0.3-0.6-0.5-1.2-0.5-1.8c0-0.6,0.2-1.2,0.5-1.8 c0.3-0.6,0.8-1,1.3-1.3C277.4,65.2,278,65.1,278.6,65.1z"/>
          </svg>
          							</div>
          						</div>
          
          						<!-- Header center message box -->
          						<div class="col-sm-4 nowarning msgbox text-center text-danger">
          						</div>
          
          						<!-- Header right message box (hostname or msg)-->
          						<div class="col-sm-4 nowarning msgbox text-center">
          							<span id="hostspan">
          								<a><h4>Login to pfSense</h4></a>
          							</span>
          						</div>
          					</div>
          	            </div>
          	        </header>
          
          	        <div style="background: #1e3f75;" class="pagebody">
          	        	<div class="col-sm-4"></div>
          
          	        	<div class="col-sm-4 offset-md-4 logoCol">
          					<div class="loginCont center-block">
          		                <form method="post"  class="login"><input type='hidden' name='__csrf_magic' value="sid:13526c6fb9f534a084b9038580fd85e288b1c75e,1657148395;ip:100a6ee99f3ef6f751d1824387eb1f8c0347c73b,1657148395" />
          			                <p class="form-title">Sign In</p>
          			                <input name="usernamefld" id="usernamefld" type="text" placeholder="Username" autocorrect="off" autocapitalize="none"/>
          			                <input name="passwordfld" id="passwordfld" type="password" placeholder="Password" />
          			                <input type="submit" name="login" value="Sign In" class="btn btn-success btn-sm" />
          		                </form>
          					</div>
          	            </div>
          
          	        	<div class="col-sm-4"></div>
          	        </div>
          
          	        <footer id="3">
          	            <div id="footertext">
          					<p class="text-muted">
          						<a target="_blank" href="https://pfsense.org">pfSense</a> is developed and maintained by <a target="_blank" href="https://netgate.com">Netgate. </a> &copy; ESF 2004 - 2022<a target="_blank" href="https://pfsense.org/license"> View license.</a>					</p>
          	            </div>
          	        </footer>
          	    </div>
          
          		<script type="text/javascript">
          		//<![CDATA[
          			/* Prevent duplicate submission  */
          			events.push(function() {
          				var submitted = false;
          
          				$(form).submit(function(e){
          					if (submitted) {
          						e.preventDefault();
          					} else {
          						submitted = true;
          						// Form is submitted because default action is not prevented
          					}
          				});
          			});
          		//]]>
          		</script>
          
          	    <script src="/vendor/jquery/jquery-3.5.1.min.js?v=1643658823"></script>
          		<script src="/vendor/bootstrap/js/bootstrap.min.js?v=1643658823"></script>
          		<script src="/js/pfSense.js?v=1643658823"></script>
          
          		<script type="text/javascript">
          		//!<[CDATA[
          		events.push(function() {
          			document.cookie=
          				"cookie_test=1" +
          				"; secure";
          
          			if (document.cookie.indexOf("cookie_test") == -1) {
          				alert("The browser must support cookies to login.");
          			}
          
          			// Delete it
          			document.cookie = "cookie_test=1; expires=Thu, 01-Jan-1970 00:00:01 GMT";
          		});
          		//]]>
          		</script>
          
          	<script type="text/javascript">CsrfMagic.end();</script></body>
          </html>
          
          
          Parameter
          PHPSESSID
          Evidence
          Set-Cookie: PHPSESSID
          Solution

          Ensure that the SameSite attribute is set to either 'lax' or ideally 'strict' for all cookies.

  3. Risk=Low, Confidence=Low (1)

    1. https://192.168.2.1 (1)

      1. Timestamp Disclosure - Unix (1)
        1. GET https://192.168.2.1/
          Alert tags
          Alert description

          A timestamp was disclosed by the application/web server - Unix

          Other info

          1643658823, which evaluates to: 2022-01-31 14:53:43

          Request
          Request line and header section (403 bytes)
          GET https://192.168.2.1/ HTTP/1.1
          Host: 192.168.2.1
          User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Firefox/91.0
          Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
          Accept-Language: en-US,en;q=0.5
          Connection: keep-alive
          Upgrade-Insecure-Requests: 1
          Sec-Fetch-Dest: document
          Sec-Fetch-Mode: navigate
          Sec-Fetch-Site: none
          Sec-Fetch-User: ?1
          
          
          Request body (0 bytes)
          Response
          Status line and header section (480 bytes)
          HTTP/1.1 200 OK
          Server: nginx
          Date: Wed, 06 Jul 2022 22:59:55 GMT
          Content-Type: text/html; charset=UTF-8
          Connection: keep-alive
          X-Frame-Options: SAMEORIGIN
          Last-Modified: Wed, 06 Jul 2022 22:59:55 GMT
          Set-Cookie: PHPSESSID=5492fdfed18d9292d14a1f7b53be5a55; path=/; secure; HttpOnly
          Expires: Thu, 19 Nov 1981 08:52:00 GMT
          Cache-Control: no-store, no-cache, must-revalidate
          Pragma: no-cache
          Strict-Transport-Security: max-age=31536000
          X-Content-Type-Options: nosniff
          
          
          Response body (9373 bytes)
          <!DOCTYPE html>
          <html lang="en">
          	<head>
          		<meta name="viewport" content="width=device-width, initial-scale=1">
          	    <link rel="stylesheet" href="/vendor/bootstrap/css/bootstrap.min.css" type="text/css">
          	    <link rel="stylesheet" href="/css/login.css?v=1643658823" type="text/css">
          		<title>pfSense - Login</title>
          		<script type="text/javascript">
          			//<![CDATA{
          			var events = events || [];
          			//]]>
          		</script>
          	<script type="text/javascript">if (top != self) {top.location.href = self.location.href;}</script><script type="text/javascript">var csrfMagicToken = "sid:13526c6fb9f534a084b9038580fd85e288b1c75e,1657148395;ip:100a6ee99f3ef6f751d1824387eb1f8c0347c73b,1657148395";var csrfMagicName = "__csrf_magic";</script><script src="/csrf/csrf-magic.js" type="text/javascript"></script></head>
          
          	<body id="login" >
          		<div id="total">
          			<header>
          				<div id="headerrow">
          					<div class="row">
          						<!-- Header left logo box -->
          						<div class="col-sm-4">
          							<div id="logodiv" style="text-align:center" class="nowarning">
          								<svg id="logo" role="img" aria-labelledby="pfsense-logo" x="0px" y="0px" viewBox="0 0 282.8 84.2">
          	<title id="pfsense-logo-svg">pfSense Logo</title>
          	<path class="logo-st0" d="M27.8,57.7c2.9,0,5.4-0.9,7.5-2.6c2.1-1.7,3.6-4,4.4-6.8c0.8-2.8,0.6-5.1-0.5-6.8c-1.1-1.7-3.2-2.6-6.1-2.6 c-2.9,0-5.4,0.9-7.5,2.6c-2.1,1.7-3.5,4-4.3,6.8c-0.8,2.8-0.7,5.1,0.5,6.8C22.8,56.9,24.8,57.7,27.8,57.7"/>
          	<path class="logo-st0" d="M115.1,46.6c-1.5-0.8-3-1.4-4.7-1.8c-1.7-0.4-3.2-0.7-4.7-1.1c-1.5-0.3-2.7-0.7-3.6-1.1c-0.9-0.4-1.4-1.1-1.4-2 c0-1.1,0.5-1.9,1.4-2.4c0.9-0.5,1.9-0.7,2.8-0.7c2.8,0,5,1,6.7,3.1l7-7c-1.7-1.8-3.9-3.1-6.4-3.8c-2.5-0.7-5-1.1-7.4-1.1 c-1.9,0-3.9,0.2-5.7,0.7c-1.9,0.5-3.6,1.2-5,2.3c-1.5,1-2.6,2.3-3.5,3.9c-0.9,1.6-1.3,3.5-1.3,5.7c0,2.3,0.5,4.2,1.4,5.6 c0.9,1.4,2.1,2.5,3.6,3.3c1.5,0.8,3,1.3,4.7,1.7c1.7,0.4,3.2,0.7,4.7,1.1c1.5,0.3,2.7,0.7,3.6,1.2c0.9,0.5,1.4,1.2,1.4,2.2 c0,1-0.5,1.7-1.6,2.1c-1.1,0.4-2.3,0.6-3.6,0.6c-1.7,0-3.3-0.3-4.6-1c-1.3-0.7-2.5-1.7-3.6-3l-7,7.7c1.8,1.9,4.1,3.2,6.7,3.9 c2.7,0.7,5.3,1.1,7.9,1.1c2,0,4-0.2,6.1-0.6c2-0.4,3.9-1,5.5-2c1.6-0.9,3-2.2,4-3.8c1-1.6,1.6-3.5,1.6-5.9c0-2.3-0.5-4.2-1.4-5.6 C117.7,48.6,116.5,47.4,115.1,46.6"/>
          	<path class="logo-st0" d="M156.3,34.1c-1.5-1.7-3.3-3-5.5-3.9c-2.2-0.9-4.6-1.4-7.2-1.4c-2.9,0-5.6,0.5-8.1,1.4c-2.5,0.9-4.7,2.2-6.6,3.9 c-1.9,1.7-3.3,3.8-4.4,6.2c-1.1,2.4-1.6,5.1-1.6,8c0,3,0.5,5.6,1.6,8c1.1,2.4,2.5,4.5,4.4,6.2c1.9,1.7,4.1,3,6.6,3.9 c2.5,0.9,5.2,1.4,8.1,1.4c3,0,5.9-0.6,8.7-1.9c2.8-1.3,5.1-3.1,7-5.4l-8-5.9c-1,1.3-2.1,2.4-3.4,3.3c-1.3,0.8-2.9,1.3-4.8,1.3 c-2.2,0-4.1-0.7-5.7-2c-1.5-1.3-2.5-3.1-3-5.2H161v-3.6c0-3-0.4-5.6-1.2-8C159,37.9,157.8,35.8,156.3,34.1 M134.3,44.1 c0.1-0.9,0.3-1.8,0.7-2.6c0.4-0.8,0.9-1.6,1.6-2.2c0.7-0.6,1.5-1.2,2.5-1.6c1-0.4,2.1-0.6,3.4-0.6c2.1,0,3.8,0.7,5.1,2.1 c1.3,1.4,2,3,1.9,5H134.3z"/>
          	<path class="logo-st0" d="M198.3,33.8c-1-1.6-2.4-2.8-4.2-3.7c-1.8-0.9-4.1-1.3-7-1.3c-1.4,0-2.7,0.2-3.8,0.5c-1.2,0.4-2.2,0.8-3.1,1.4 c-0.9,0.6-1.7,1.2-2.4,1.9c-0.7,0.7-1.2,1.4-1.5,2.1H176v-5.1h-11v37.2h11.5V48.4c0-1.2,0.1-2.4,0.2-3.5c0.2-1.1,0.5-2.1,1-3 c0.5-0.9,1.2-1.6,2.1-2.1c0.9-0.5,2.1-0.8,3.6-0.8c1.5,0,2.6,0.3,3.4,0.9c0.8,0.6,1.4,1.4,1.8,2.4c0.4,1,0.6,2,0.7,3.2 c0.1,1.1,0.1,2.3,0.1,3.3v18.2h11.5V46.4c0-2.5-0.2-4.8-0.5-7C199.9,37.3,199.3,35.4,198.3,33.8"/>
          	<path class="logo-st0" d="M231.5,46.6c-1.5-0.8-3-1.4-4.7-1.8c-1.7-0.4-3.2-0.7-4.7-1.1c-1.5-0.3-2.7-0.7-3.6-1.1c-0.9-0.4-1.4-1.1-1.4-2 c0-1.1,0.5-1.9,1.4-2.4c0.9-0.5,1.9-0.7,2.8-0.7c2.8,0,5,1,6.7,3.1l7-7c-1.7-1.8-3.9-3.1-6.4-3.8c-2.5-0.7-5-1.1-7.4-1.1 c-1.9,0-3.9,0.2-5.7,0.7c-1.9,0.5-3.6,1.2-5,2.3c-1.5,1-2.6,2.3-3.5,3.9c-0.9,1.6-1.3,3.5-1.3,5.7c0,2.3,0.5,4.2,1.4,5.6 c0.9,1.4,2.1,2.5,3.6,3.3c1.5,0.8,3,1.3,4.7,1.7c1.7,0.4,3.2,0.7,4.7,1.1c1.5,0.3,2.7,0.7,3.6,1.2c0.9,0.5,1.4,1.2,1.4,2.2 c0,1-0.5,1.7-1.6,2.1c-1.1,0.4-2.3,0.6-3.6,0.6c-1.7,0-3.3-0.3-4.6-1c-1.3-0.7-2.5-1.7-3.6-3l-7,7.7c1.8,1.9,4.1,3.2,6.7,3.9 c2.7,0.7,5.3,1.1,7.9,1.1c2,0,4-0.2,6.1-0.6c2-0.4,3.9-1,5.5-2c1.6-0.9,3-2.2,4-3.8c1-1.6,1.6-3.5,1.6-5.9c0-2.3-0.5-4.2-1.4-5.6 C234.1,48.6,232.9,47.4,231.5,46.6"/>
          	<path class="logo-st0" d="M277.4,51.9v-4.2c-0.1-2.7-0.5-5.2-1.2-7.4c-0.8-2.4-2-4.5-3.5-6.2c-1.5-1.7-3.3-3-5.5-3.9 c-2.2-0.9-4.6-1.4-7.2-1.4c-2.9,0-5.6,0.5-8.1,1.4c-2.5,0.9-4.7,2.2-6.6,3.9c-1.9,1.7-3.3,3.8-4.4,6.2c-1.1,2.4-1.6,5.1-1.6,8 c0,3,0.5,5.6,1.6,8c1.1,2.4,2.5,4.5,4.4,6.2c1.9,1.7,4.1,3,6.6,3.9c2.5,0.9,5.2,1.4,8.1,1.4c3,0,5.9-0.6,8.7-1.9 c2.8-1.3,5.1-3.1,7-5.4l-8-5.9c-1,1.3-2.1,2.4-3.4,3.3c-1.3,0.8-2.9,1.3-4.8,1.3c-2.2,0-4.1-0.7-5.7-2c-1.5-1.3-2.5-3.1-3-5.2H277.4 z M250.7,44.1c0.1-0.9,0.3-1.8,0.7-2.6c0.4-0.8,0.9-1.6,1.6-2.2c0.7-0.6,1.5-1.2,2.5-1.6c1-0.4,2.1-0.6,3.4-0.6 c2.1,0,3.8,0.7,5.1,2.1c1.3,1.4,2,3,1.9,5H250.7z"/>
          	<path class="logo-st1" d="M52.6,38.9l2.6-9.2h4.6l1.8-6.6c0.6-2,1.3-4,2.2-5.8c0.8-1.8,2-3.4,3.4-4.8c1.4-1.4,3.2-2.5,5.3-3.3 c2.1-0.8,4.8-1.2,7.9-1.2c0.8,0,1.5,0,2.3,0.1c-0.7-2.9-3.3-5-6.3-5.1H11.9c-3.6,0-6.5,3-6.5,6.6V67l10.5-37.3h10.6l-1.4,4.9h0.2 c0.6-0.7,1.4-1.3,2.4-2c1-0.7,2-1.3,3.1-1.9c1.1-0.6,2.3-1,3.6-1.4c1.3-0.4,2.6-0.5,3.9-0.5c2.8,0,5.1,0.5,7.1,1.4 c2,0.9,3.5,2.3,4.7,4c1,1.5,1.6,3.3,1.9,5.4l0.8-0.6H52.6z"/>
          	<path class="logo-st2" d="M82.1,17.9c-0.5-0.1-1.1-0.2-1.8-0.2c-1.8,0-3.3,0.4-4.5,1.2c-1.1,0.8-2.1,2.4-2.8,4.9l-1.7,5.9h6.5l1.6,5.1 l-4.2,4.1h-6.5l-7.9,28H49.4l7.9-28h-4.4L52,39.5c0,0.2,0.1,0.5,0.1,0.7c0.2,2.3-0.1,4.9-0.9,7.7c-0.7,2.6-1.8,5.1-3.3,7.5 c-1.5,2.4-3.2,4.5-5.1,6.3c-2,1.8-4.2,3.3-6.6,4.4c-2.4,1.1-4.9,1.6-7.6,1.6c-2.4,0-4.5-0.4-6.4-1.1c-1.9-0.7-3.2-2-4-3.8h-0.2 l-5,17.7h63.3c3.6,0,6.6-2.9,6.6-6.6V18.2C82.6,18.1,82.3,18,82.1,17.9"/>
          	<path class="logo-st0" d="M277.6,68.5h0.8c0.4,0,0.6-0.1,0.7-0.2c0.1-0.1,0.2-0.2,0.2-0.4c0-0.1,0-0.2-0.1-0.3c-0.1-0.1-0.1-0.2-0.3-0.2 c-0.1,0-0.3-0.1-0.6-0.1h-0.7V68.5z M277,70.6v-3.8h1.3c0.5,0,0.8,0,1,0.1c0.2,0.1,0.4,0.2,0.5,0.4c0.1,0.2,0.2,0.4,0.2,0.6 c0,0.3-0.1,0.5-0.3,0.7c-0.2,0.2-0.5,0.3-0.8,0.3c0.1,0.1,0.2,0.1,0.3,0.2c0.2,0.2,0.3,0.4,0.6,0.8l0.5,0.7h-0.8l-0.3-0.6 c-0.3-0.5-0.5-0.8-0.6-0.9c-0.1-0.1-0.3-0.1-0.5-0.1h-0.4v1.6H277z M278.6,65.7c-0.5,0-1,0.1-1.5,0.4c-0.5,0.3-0.8,0.6-1.1,1.1 c-0.3,0.5-0.4,1-0.4,1.5c0,0.5,0.1,1,0.4,1.5c0.3,0.5,0.6,0.8,1.1,1.1c0.5,0.3,1,0.4,1.5,0.4c0.5,0,1-0.1,1.5-0.4 c0.5-0.3,0.8-0.6,1.1-1.1c0.3-0.5,0.4-1,0.4-1.5c0-0.5-0.1-1-0.4-1.5c-0.3-0.5-0.6-0.8-1.1-1.1C279.6,65.8,279.1,65.7,278.6,65.7z M278.6,65.1c0.6,0,1.2,0.2,1.8,0.5c0.6,0.3,1,0.7,1.3,1.3c0.3,0.6,0.5,1.2,0.5,1.8c0,0.6-0.2,1.2-0.5,1.8c-0.3,0.6-0.8,1-1.3,1.3 c-0.6,0.3-1.2,0.5-1.8,0.5c-0.6,0-1.2-0.2-1.8-0.5c-0.6-0.3-1-0.8-1.3-1.3c-0.3-0.6-0.5-1.2-0.5-1.8c0-0.6,0.2-1.2,0.5-1.8 c0.3-0.6,0.8-1,1.3-1.3C277.4,65.2,278,65.1,278.6,65.1z"/>
          </svg>
          							</div>
          						</div>
          
          						<!-- Header center message box -->
          						<div class="col-sm-4 nowarning msgbox text-center text-danger">
          						</div>
          
          						<!-- Header right message box (hostname or msg)-->
          						<div class="col-sm-4 nowarning msgbox text-center">
          							<span id="hostspan">
          								<a><h4>Login to pfSense</h4></a>
          							</span>
          						</div>
          					</div>
          	            </div>
          	        </header>
          
          	        <div style="background: #1e3f75;" class="pagebody">
          	        	<div class="col-sm-4"></div>
          
          	        	<div class="col-sm-4 offset-md-4 logoCol">
          					<div class="loginCont center-block">
          		                <form method="post"  class="login"><input type='hidden' name='__csrf_magic' value="sid:13526c6fb9f534a084b9038580fd85e288b1c75e,1657148395;ip:100a6ee99f3ef6f751d1824387eb1f8c0347c73b,1657148395" />
          			                <p class="form-title">Sign In</p>
          			                <input name="usernamefld" id="usernamefld" type="text" placeholder="Username" autocorrect="off" autocapitalize="none"/>
          			                <input name="passwordfld" id="passwordfld" type="password" placeholder="Password" />
          			                <input type="submit" name="login" value="Sign In" class="btn btn-success btn-sm" />
          		                </form>
          					</div>
          	            </div>
          
          	        	<div class="col-sm-4"></div>
          	        </div>
          
          	        <footer id="3">
          	            <div id="footertext">
          					<p class="text-muted">
          						<a target="_blank" href="https://pfsense.org">pfSense</a> is developed and maintained by <a target="_blank" href="https://netgate.com">Netgate. </a> &copy; ESF 2004 - 2022<a target="_blank" href="https://pfsense.org/license"> View license.</a>					</p>
          	            </div>
          	        </footer>
          	    </div>
          
          		<script type="text/javascript">
          		//<![CDATA[
          			/* Prevent duplicate submission  */
          			events.push(function() {
          				var submitted = false;
          
          				$(form).submit(function(e){
          					if (submitted) {
          						e.preventDefault();
          					} else {
          						submitted = true;
          						// Form is submitted because default action is not prevented
          					}
          				});
          			});
          		//]]>
          		</script>
          
          	    <script src="/vendor/jquery/jquery-3.5.1.min.js?v=1643658823"></script>
          		<script src="/vendor/bootstrap/js/bootstrap.min.js?v=1643658823"></script>
          		<script src="/js/pfSense.js?v=1643658823"></script>
          
          		<script type="text/javascript">
          		//!<[CDATA[
          		events.push(function() {
          			document.cookie=
          				"cookie_test=1" +
          				"; secure";
          
          			if (document.cookie.indexOf("cookie_test") == -1) {
          				alert("The browser must support cookies to login.");
          			}
          
          			// Delete it
          			document.cookie = "cookie_test=1; expires=Thu, 01-Jan-1970 00:00:01 GMT";
          		});
          		//]]>
          		</script>
          
          	<script type="text/javascript">CsrfMagic.end();</script></body>
          </html>
          
          
          Evidence
          1643658823
          Solution

          Manually confirm that the timestamp data is not sensitive, and that the data cannot be aggregated to disclose exploitable patterns.

  4. Risk=Informational, Confidence=Low (1)

    1. https://192.168.2.1 (1)

      1. Information Disclosure - Suspicious Comments (1)
        1. GET https://192.168.2.1/csrf/csrf-magic.js
          Alert tags
          Alert description

          The response appears to contain suspicious comments which may help an attacker. Note: Matches made within script blocks or files are against the entire content not only comments.

          Other info

          The following pattern was used: \bXXX\b and was detected in the element starting with: " // XXX: Removed to eliminate 'Refused to set unsafe header "Content-length" ' errors in modern browsers", see evidence field for the suspicious comment/snippet.

          Request
          Request line and header section (387 bytes)
          GET https://192.168.2.1/csrf/csrf-magic.js HTTP/1.1
          Host: 192.168.2.1
          User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Firefox/91.0
          Accept: */*
          Accept-Language: en-US,en;q=0.5
          Connection: keep-alive
          Referer: https://192.168.2.1/
          Cookie: PHPSESSID=5492fdfed18d9292d14a1f7b53be5a55
          Sec-Fetch-Dest: script
          Sec-Fetch-Mode: no-cors
          Sec-Fetch-Site: same-origin
          
          
          Request body (0 bytes)
          Response
          Status line and header section (324 bytes)
          HTTP/1.1 200 OK
          Server: nginx
          Date: Wed, 06 Jul 2022 22:59:55 GMT
          Content-Type: application/javascript
          Content-Length: 7313
          Last-Modified: Mon, 31 Jan 2022 19:53:43 GMT
          Connection: keep-alive
          ETag: "61f83e47-1c91"
          Strict-Transport-Security: max-age=31536000
          X-Content-Type-Options: nosniff
          Accept-Ranges: bytes
          
          
          Response body (7313 bytes)
          /**
           * @file
           *
           * Rewrites XMLHttpRequest to automatically send CSRF token with it. In theory
           * plays nice with other JavaScript libraries, needs testing though.
           */
          
          // Here are the basic overloaded method definitions
          // The wrapper must be set BEFORE onreadystatechange is written to, since
          // a bug in ActiveXObject prevents us from properly testing for it.
          CsrfMagic = function(real) {
              // try to make it ourselves, if you didn't pass it
              if (!real) try { real = new XMLHttpRequest; } catch (e) {;}
              if (!real) try { real = new ActiveXObject('Msxml2.XMLHTTP'); } catch (e) {;}
              if (!real) try { real = new ActiveXObject('Microsoft.XMLHTTP'); } catch (e) {;}
              if (!real) try { real = new ActiveXObject('Msxml2.XMLHTTP.4.0'); } catch (e) {;}
              this.csrf = real;
              // properties
              var csrfMagic = this;
              real.onreadystatechange = function() {
                  csrfMagic._updateProps();
                  return csrfMagic.onreadystatechange ? csrfMagic.onreadystatechange() : null;
              };
              csrfMagic._updateProps();
          }
          
          CsrfMagic.prototype = {
          
              open: function(method, url, async, username, password) {
                  if (method == 'POST') this.csrf_isPost = true;
                  // deal with Opera bug, thanks jQuery
                  if (username) return this.csrf_open(method, url, async, username, password);
                  else return this.csrf_open(method, url, async);
              },
              csrf_open: function(method, url, async, username, password) {
                  if (username) return this.csrf.open(method, url, async, username, password);
                  else return this.csrf.open(method, url, async);
              },
          
              send: function(data) {
                  if (!this.csrf_isPost) return this.csrf_send(data);
                  prepend = csrfMagicName + '=' + csrfMagicToken + '&';
              //    XXX: Removed to eliminate 'Refused to set unsafe header "Content-length" ' errors in modern browsers
              //    if (this.csrf_purportedLength === undefined) {
              //        this.csrf_setRequestHeader("Content-length", this.csrf_purportedLength + prepend.length);
              //        delete this.csrf_purportedLength;
              //    }
                  delete this.csrf_isPost;
                  return this.csrf_send(prepend + data);
              },
              csrf_send: function(data) {
                  return this.csrf.send(data);
              },
          
              setRequestHeader: function(header, value) {
                  // We have to auto-set this at the end, since we don't know how long the
                  // nonce is when added to the data.
                  if (this.csrf_isPost && header == "Content-length") {
                      this.csrf_purportedLength = value;
                      return;
                  }
                  return this.csrf_setRequestHeader(header, value);
              },
              csrf_setRequestHeader: function(header, value) {
                  return this.csrf.setRequestHeader(header, value);
              },
          
              abort: function() {
                  return this.csrf.abort();
              },
              getAllResponseHeaders: function() {
                  return this.csrf.getAllResponseHeaders();
              },
              getResponseHeader: function(header) {
                  return this.csrf.getResponseHeader(header);
              } // ,
          }
          
          // proprietary
          CsrfMagic.prototype._updateProps = function() {
              this.readyState = this.csrf.readyState;
              if (this.readyState == 4) {
                  this.responseText = this.csrf.responseText;
                  this.responseXML  = this.csrf.responseXML;
                  this.status       = this.csrf.status;
                  this.statusText   = this.csrf.statusText;
              }
          }
          CsrfMagic.process = function(base) {
              if(typeof base == 'object') {
                  base[csrfMagicName] = csrfMagicToken;
                  return base;
              }
              var prepend = csrfMagicName + '=' + csrfMagicToken;
              if (base) return prepend + '&' + base;
              return prepend;
          }
          // callback function for when everything on the page has loaded
          CsrfMagic.end = function() {
              // This rewrites forms AGAIN, so in case buffering didn't work this
              // certainly will.
              forms = document.getElementsByTagName('form');
              for (var i = 0; i < forms.length; i++) {
                  form = forms[i];
                  if (form.method.toUpperCase() !== 'POST') continue;
                  if (form.elements[csrfMagicName]) continue;
                  var input = document.createElement('input');
                  input.setAttribute('name',  csrfMagicName);
                  input.setAttribute('value', csrfMagicToken);
                  input.setAttribute('type',  'hidden');
                  form.appendChild(input);
              }
          }
          
          // Sets things up for Mozilla/Opera/nice browsers
          // We very specifically match against Internet Explorer, since they haven't
          // implemented prototypes correctly yet.
          if (window.XMLHttpRequest && window.XMLHttpRequest.prototype && '\v' != 'v') {
              var x = XMLHttpRequest.prototype;
              var c = CsrfMagic.prototype;
          
              // Save the original functions
              x.csrf_open = x.open;
              x.csrf_send = x.send;
              x.csrf_setRequestHeader = x.setRequestHeader;
          
              // Notice that CsrfMagic is itself an instantiatable object, but only
              // open, send and setRequestHeader are necessary as decorators.
              x.open = c.open;
              x.send = c.send;
              x.setRequestHeader = c.setRequestHeader;
          } else {
              // The only way we can do this is by modifying a library you have been
              // using. We support YUI, script.aculo.us, prototype, MooTools,
              // jQuery, Ext and Dojo.
              if (window.jQuery) {
                  // jQuery didn't implement a new XMLHttpRequest function, so we have
                  // to do this the hard way.
                  jQuery.csrf_ajax = jQuery.ajax;
                  jQuery.ajax = function( s ) {
                      if (s.type && s.type.toUpperCase() == 'POST') {
                          s = jQuery.extend(true, s, jQuery.extend(true, {}, jQuery.ajaxSettings, s));
                          if ( s.data && s.processData && typeof s.data != "string" ) {
                              s.data = jQuery.param(s.data);
                          }
                          s.data = CsrfMagic.process(s.data);
                      }
                      return jQuery.csrf_ajax( s );
                  }
              }
              if (window.Prototype) {
                  // This works for script.aculo.us too
                  Ajax.csrf_getTransport = Ajax.getTransport;
                  Ajax.getTransport = function() {
                      return new CsrfMagic(Ajax.csrf_getTransport());
                  }
              }
              if (window.MooTools) {
                  Browser.csrf_Request = Browser.Request;
                  Browser.Request = function () {
                      return new CsrfMagic(Browser.csrf_Request());
                  }
              }
              if (window.YAHOO) {
                  // old YUI API
                  YAHOO.util.Connect.csrf_createXhrObject = YAHOO.util.Connect.createXhrObject;
                  YAHOO.util.Connect.createXhrObject = function (transaction) {
                      obj = YAHOO.util.Connect.csrf_createXhrObject(transaction);
                      obj.conn = new CsrfMagic(obj.conn);
                      return obj;
                  }
              }
              if (window.Ext) {
                  // Ext can use other js libraries as loaders, so it has to come last
                  // Ext's implementation is pretty identical to Yahoo's, but we duplicate
                  // it for comprehensiveness's sake.
                  Ext.lib.Ajax.csrf_createXhrObject = Ext.lib.Ajax.createXhrObject;
                  Ext.lib.Ajax.createXhrObject = function (transaction) {
                      obj = Ext.lib.Ajax.csrf_createXhrObject(transaction);
                      obj.conn = new CsrfMagic(obj.conn);
                      return obj;
                  }
              }
              if (window.dojo) {
                  // NOTE: this doesn't work with latest dojo
                  dojo.csrf__xhrObj = dojo._xhrObj;
                  dojo._xhrObj = function () {
                      return new CsrfMagic(dojo.csrf__xhrObj());
                  }
              }
          }
          
          Evidence
          XXX
          Solution

          Remove all comments that return information that may help an attacker and fix any underlying problems they refer to.

Appendix

Alert types

This section contains additional information on the types of alerts in the report.

  1. Content Security Policy (CSP) Header Not Set

    Source raised by a passive scanner (Content Security Policy (CSP) Header Not Set)
    CWE ID 693
    WASC ID 15
    Reference
    1. https://developer.mozilla.org/en-US/docs/Web/Security/CSP/Introducing_Content_Security_Policy
    2. https://cheatsheetseries.owasp.org/cheatsheets/Content_Security_Policy_Cheat_Sheet.html
    3. http://www.w3.org/TR/CSP/
    4. http://w3c.github.io/webappsec/specs/content-security-policy/csp-specification.dev.html
    5. http://www.html5rocks.com/en/tutorials/security/content-security-policy/
    6. http://caniuse.com/#feat=contentsecuritypolicy
    7. http://content-security-policy.com/
  2. Cookie without SameSite Attribute

    Source raised by a passive scanner (Cookie without SameSite Attribute)
    CWE ID 1275
    WASC ID 13
    Reference
    1. https://tools.ietf.org/html/draft-ietf-httpbis-cookie-same-site
  3. Timestamp Disclosure - Unix

    Source raised by a passive scanner (Timestamp Disclosure)
    CWE ID 200
    WASC ID 13
    Reference
    1. http://projects.webappsec.org/w/page/13246936/Information%20Leakage
  4. Information Disclosure - Suspicious Comments

    Source raised by a passive scanner (Information Disclosure - Suspicious Comments)
    CWE ID 200
    WASC ID 13