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

Ricardo Iramar dos Santos <[email protected]> Tue, 20 Oct 2015 13:52:33 -0200
Newsgroups gmane.comp.security.web-applications,gmane.comp.security.penetration
Message-ID <CAE5Wca1xrLHumoovX6EMed1AArjYrUCExYJjA1oH=bpPpH6WCA@mail.gmail.com>
Yes, I saw Scott's website and other interesting stuff.
We changed some twitters
(https://twitter.com/Scott_Helme/status/639756303376773120).

On Tue, Oct 20, 2015 at 11:52 AM, Robin Wood <[email protected]> wrote:
> Have you seen this project by Scott?
>
> https://securityheaders.io/
>
> Similar to yours except works from a website rather than cli.
>
> Robin
>
> On 20 October 2015 at 14:24, Ricardo Iramar dos Santos
> <[email protected]> wrote:
>> Make sense. I'll include your suggestion in my TODO list.
>> My first goal for the version 0 was construct a simple "platform" and
>> make it usable.
>> One of the goals for version 1 is improve the database with users
>> feedback like yours.
>> Thanks!
>>
>> On Tue, Oct 20, 2015 at 10:21 AM, Robin Wood <[email protected]> wrote:
>>> I'd say both of those were references not recommendations, the
>>> recommendation should be something along the lines of:
>>>
>>> Ensure cookies protecting important data, such as session tokens, are
>>> correctly protected (httponly and secure flags).
>>> Beware session fixation
>>>
>>> I may add ensure good entropy on session tokens but that is more in
>>> session management than cookies.
>>>
>>> For the security comment, what would you write about cookies in a test
>>> report? Check things like OWASP and see what they say but make sure
>>> whatever you put that it is within the context of the short paragraph
>>> you've got that you give a realistic comment on the header.
>>>
>>> Robin
>>>
>>> On 20 October 2015 at 13:14, Ricardo Iramar dos Santos
>>> <[email protected]> wrote:
>>>> Thanks for your advise and opinion.
>>>> Have you seen the recommendations field?
>>>> Do you have a suggestion for a better security description?
>>>>
>>>>>>   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.
>>>>
>>>> On Tue, Oct 20, 2015 at 8:24 AM, Robin Wood <[email protected]> wrote:
>>>>> On 19 October 2015 at 16:49, Ricardo Iramar dos Santos
>>>>> <[email protected]> wrote:
>>>>>> 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.
>>>>>
>>>>> I can see what they are trying to say but the snippet you include in
>>>>> the results takes it out of context and doesn't really represent their
>>>>> message. I'd be careful giving results you don't fully understand from
>>>>> your tools, without the context they could cause problems for users
>>>>> who don't do additional research.
>>>>>
>>>>> Robin
>>>>>
>>>>>> 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
--------------------------------------