Re: hsecscan v0 (https://github.com/riramar/hsecscan)

Ricardo Iramar dos Santos <[email protected]> Mon, 19 Oct 2015 13:49:23 -0200
Newsgroups gmane.comp.security.web-applications,gmane.comp.security.penetration
Message-ID <CAE5Wca32C-ddhsjRT2Gc2r8XW818MOAq4utbyOko7Ec0AaQGRQ@mail.gmail.com>
Hi Robin Wood,

This security description came from here
https://tools.ietf.org/html/rfc6265#section-8 so we could ask your
question to the author.
But IMO the RFC author is saying the HTTPS is insufficient because of
attacks like described here
https://www.usenix.org/conference/usenixsecurity15/technical-sessions/presentation/zheng.
I don't know any other HTTP State Management Mechanism than cookies
for web applications accessible by browsers.

On Sun, Oct 18, 2015 at 6:32 AM, Robin Wood <[email protected]> wrote:
>
> On 18 Oct 2015 03:02, "Ricardo Iramar dos Santos" <[email protected]> wrote:
>>
>> Hi All,
>>
>> I started to develop in python a dumb tool called hsecscan
>> (https://github.com/riramar/hsecscan). I'll appreciate any feedback.
>> :)
>> It's a security scanner for HTTP response headers. Just finished the
>> usable version 0 with a few features.
>>
>> $ ./hsecscan.py
>> usage: hsecscan.py [-h] [-P] [-p] [-u URL] [-R]
>>
>> A security scanner for HTTP response headers.
>>
>> optional arguments:
>>   -h, --help         show this help message and exit
>>   -P, --database     Print the entire response headers database.
>>   -p, --headers      Print only the enabled response headers from
>> database.
>>   -u URL, --URL URL  The URL to be scanned.
>>   -R, --redirect     Print redirect headers.
>>
>>
>> The code itself is short because I spent most of my time constructing
>> the sqlite database. You can check the database content on hsecscan.db
>> (sqlite) or hsecscan.tsv (tab separated value).
>> Most of the headers came from
>> https://www.iana.org/assignments/message-headers/message-headers.xhtml
>> and the security description/reference/recommendation came from the
>> related RFC. I also include all headers from
>> https://www.owasp.org/index.php/List_of_useful_HTTP_headers. The idea
>> is keep the database up-to-date and if you want you can add your
>> headers.
>> Since this is version 0 I didn't include all the features that I want
>> and this is my personal TODO list:
>>
>> Improve output to highlight the required headers
>> Add option to select the method (GET or POST)
>> Improve README.md with more information (eg. how to use as a module)
>> Add options to show only the enabled headers
>> Add option to select the User-Agent header or set any other header
>> Add option to detect bad practice (eg. Content-Type without charset=utf-8)
>>
>>
>> Basically "hsecscan.py -u http://google.com" will do a GET on
>> google.com over HTTP and retrieve all the headers. For each header
>> hsecscan.py will search on the database and print the results. If you
>> select the option "-R" hsecscan.py will also print results for each
>> redirect response header.
>>
>> $ ./hsecscan.py -u http://google.com
>> URL: http://www.google.com.br/?gfe_rd=cr&ei=uO8eVtCNA_Cp8weYqLCgAQ
>> Code: 200
>> Headers:
>> Date: Thu, 15 Oct 2015 00:13:45 GMT
>> Expires: -1
>> Cache-Control: private, max-age=0
>> Content-Type: text/html; charset=ISO-8859-1
>> P3P: CP="This is not a P3P policy! See
>> http://www.google.com/support/accounts/bin/answer.py?hl=en&answer=151657
>> for more info."
>> Server: gws
>> X-XSS-Protection: 1; mode=block
>> X-Frame-Options: SAMEORIGIN
>> Set-Cookie:
>> PREF=ID=1111111111111111:FF=0:TM=1444868025:LM=1444868025:V=1:S=63__QH8d-rawj72t;
>> expires=Thu, 31-Dec-2015 16:02:17 GMT; path=/; domain=.google.com.br
>> Set-Cookie:
>> NID=72=CoRBDHqHqS4hFQZX_KM-EihW23odkCZSkndoN2tdH6DJY6lG--ZGRIGTQSZdqhePaWrWlBkwP0DXjt3r4OKLtnaU6ZsrVypT8GqJuN-9YzcDWHfamVpZTWd0b72YuiGNMDHBRH5X;
>> expires=Fri, 15-Apr-2016 00:13:45 GMT; path=/; domain=.google.com.br;
>> HttpOnly
>> Accept-Ranges: none
>> Vary: Accept-Encoding
>> Connection: close
>>
>>
>>   Header Field Name: X-XSS-Protection
>>   Type 1: Personal
>>   Protocol: http
>>   Status:
>>   Reference:
>> http://blogs.msdn.com/b/ie/archive/2008/07/02/ie8-security-part-iv-the-xss-filter.aspx
>>   Type 2: Response
>>   Enable: Y
>>   Required: Y
>>   HTTPS: N
>>   Security Description: This header enables the Cross-site scripting
>> (XSS) filter built into most recent web browsers. It's usually enabled
>> by default anyway, so the role of this header is to re-enable the
>> filter for this particular website if it was disabled by the user.
>> This header is supported in IE 8+, and in Chrome (not sure which
>> versions). The anti-XSS filter was added in Chrome 4. Its unknown if
>> that version honored this header.
>>   Security Reference:
>> https://www.owasp.org/index.php/List_of_useful_HTTP_headers
>>   Recommendations: Use "X-XSS-Protection: 1; mode=block" whenever is
>> possible (ref.
>> http://blogs.msdn.com/b/ieinternals/archive/2011/01/31/controlling-the-internet-explorer-xss-filter-with-the-x-xss-protection-http-header.aspx).
>>   CWE: CWE-79: Improper Neutralization of Input During Web Page
>> Generation ('Cross-site Scripting')
>>   CWE URL: https://cwe.mitre.org/data/definitions/79.html
>>
>>
>>   Header Field Name: Set-Cookie
>>   Type 1: Permanent
>>   Protocol: http
>>   Status: standard
>>   Reference: https://tools.ietf.org/html/rfc6265
>>   Type 2: Response
>>   Enable: Y
>>   Required: N
>>   HTTPS: N
>>   Security Description: Cookies have a number of security pitfalls. In
>> particular, cookies encourage developers to rely on ambient authority
>> for authentication, often becoming vulnerable to attacks such as
>> cross-site request forgery. Also, when storing session identifiers in
>> cookies, developers often create session fixation vulnerabilities.
>> Transport-layer encryption, such as that employed in HTTPS, is
>> insufficient to prevent a network attacker from obtaining or altering
>> a victim's cookies because the cookie protocol itself has various
>> vulnerabilities. In addition, by default, cookies do not provide
>> confidentiality or integrity from network attackers, even when used in
>> conjunction with HTTPS.
>>   Security Reference: https://tools.ietf.org/html/rfc6265#section-8
>>   Recommendations: Please at least read these references:
>> https://tools.ietf.org/html/rfc6265#section-8 and
>> https://www.owasp.org/index.php/Session_Management_Cheat_Sheet#Cookies.
>>   CWE: CWE-614: Sensitive Cookie in HTTPS Session Without 'Secure'
>> Attribute
>>   CWE URL: https://cwe.mitre.org/data/definitions/614.html
>
> Hi
> I've not ran the tool yet but this feedback on cookies caught my eye. What
> is ambient authority and why is HTTPS is insufficient to protect a cookie
> from a network attacker?
>
> From this it seems you don't like the idea of cookies being used to manage
> authenticated sessions so what would you suggest as an alternative?
>
> Robin
>
>>
>>   Header Field Name: Vary
>>   Type 1: Permanent
>>   Protocol: http
>>   Status: standard
>>   Reference: https://tools.ietf.org/html/rfc7231#section-7.1.4
>>   Type 2: Response
>>   Enable: N
>>   Required:
>>   HTTPS:
>>   Security Description:
>>   Security Reference:
>>   Recommendations:
>>   CWE:
>>   CWE URL:
>>
>>
>>   Header Field Name: Server
>>   Type 1: Permanent
>>   Protocol: http
>>   Status: standard
>>   Reference: https://tools.ietf.org/html/rfc7231#section-7.4.2
>>   Type 2: Response
>>   Enable: Y
>>   Required: N
>>   HTTPS: N
>>   Security Description: Overly long and detailed Server field values
>> increase response latency and potentially reveal internal
>> implementation details that might make it (slightly) easier for
>> attackers to find and exploit known security holes.
>>   Security Reference: https://tools.ietf.org/html/rfc7231#section-7.4.2
>>   Recommendations: An origin server SHOULD NOT generate a Server field
>> containing needlessly fine-grained detail and SHOULD limit the
>> addition of subproducts by third parties.
>>   CWE: CWE-200: Information Exposure
>>   CWE URL: https://cwe.mitre.org/data/definitions/200.html
>>
>>
>>   Header Field Name: X-Frame-Options
>>   Type 1: Permanent
>>   Protocol: http
>>   Status: informational
>>   Reference: https://tools.ietf.org/html/rfc7034
>>   Type 2: Response
>>   Enable: Y
>>   Required: Y
>>   HTTPS: N
>>   Security Description: The use of "X-Frame-Options" allows a web page
>> from host B to declare that its content (for example, a button, links,
>> text, etc.) must not be displayed in a frame (<frame> or <iframe>) of
>> another page (e.g., from host A). This is done by a policy declared in
>> the HTTP header and enforced by browser implementations.
>>   Security Reference: https://tools.ietf.org/html/rfc7034
>>   Recommendations:  In 2009 and 2010, many browser vendors
>> ([Microsoft-X-Frame-Options] and [Mozilla-X-Frame-Options]) introduced
>> the use of a non-standard HTTP [RFC2616] header field
>> "X-Frame-Options" to protect against clickjacking. Please check here
>> https://www.owasp.org/index.php/Clickjacking_Defense_Cheat_Sheet
>> what's the best option for your case.
>>   CWE: CWE-693: Protection Mechanism Failure
>>   CWE URL: https://cwe.mitre.org/data/definitions/693.html
>>
>>
>>
>> This list is sponsored by Cenzic
>> --------------------------------------
>> Let Us Hack You. Before Hackers Do!
>> It's Finally Here - The Cenzic Website HealthCheck. FREE.
>> Request Yours Now!
>> http://www.cenzic.com/2009HClaunch_Securityfocus
>> --------------------------------------
>>



This list is sponsored by Cenzic
--------------------------------------
Let Us Hack You. Before Hackers Do!
It's Finally Here - The Cenzic Website HealthCheck. FREE.
Request Yours Now! 
http://www.cenzic.com/2009HClaunch_Securityfocus
--------------------------------------