<?xml version="1.0" encoding="UTF-8"?>
<!-- name="generator" content="blojsom v3.2" -->
<rss version="2.0" xmlns:wfw="http://wellformedweb.org/CommentAPI/">
    <channel>
        <title>Off by On</title>
        <link>http://blog.fortify.com/blog</link>
        <description>A Software Security Blog</description>
        <language>en</language>
        <image>
            <url>http://blog.fortify.com/favicon.ico</url>
            <title>Off by On</title>
            <link>http://blog.fortify.com/blog</link>
        </image>
        <docs>http://blogs.law.harvard.edu/tech/rss</docs>
		<generator>blojsom v3.2</generator>
		<managingEditor>webmaster@fortify.com</managingEditor>
		<webMaster>webmaster@fortify.com</webMaster>
		<pubDate>Fri, 27 Apr 2012 17:56:38 -0700</pubDate>

                        <item>
            <title>HTML5</title>
            <link>http://blog.fortify.com/blog/2012/04/27/HTML5</link>
            <description>&lt;p&gt;One of the hottest topics among the members of web and security communities is HTML5. Lately, we&#39;ve been getting a lot of requests from our customers regarding the ability to scan HTML5 applications with our static analysis products. Everyone wants to say that they&#39;ve done something to secure their HTML5 apps, but few know what that actually means. I think the problem stems from the fact that HTML5 spec is not even complete, and yet the browsers already provide implementations for the proposed features. Plus, HTML5 isn&#39;t a completely new language – it&#39;s a collection of new features that present themselves through new HTML tags and attributes, JavaScript APIs, and HTTP headers.&lt;/p&gt;

&lt;p&gt;In this post I won&#39;t go into detailed analysis of HTML5 security, but I would like to say that in my opinion the most sensitive areas of this new technology are going to be Cross-Origin Resource Sharing (CORS) policy that allows for communication between scripts running on different domains and client-side storage. We&#39;ve already seen evidence that this can be abused in two alarming ways: storing sensitive information insecurely and storing &lt;a href=&quot;http://www.cs.berkeley.edu/~dawnsong/papers/2010%20emperors%20new%20api.pdf&quot;&gt;code that gets eval&#39;ed without proper sanitization&lt;/a&gt;. The latter is especially problematic when an application also contains a vulnerability that allows an attacker to inject malicious code into the client-side storage.&lt;/p&gt;

&lt;p&gt;There are a number of other HTML5 features that I think will have a lot of security ramifications, such as cross-origin messaging, web sockets, file system APIs, as well as various others. However, I do not know whether anyone is using these primitives right now. What I do know is that the two features I mentioned above are already being used and abused. As it was pointed out &lt;a href=&quot;http://securitymusings.com/article/3159/how-a-platform-using-html5-can-affect-the-security-of-your-website&quot;&gt;here&lt;/a&gt;, there are already several cases of applications using local storage code caching with one of the scripts vulnerable to reflected XSS seen in the wild. On the other hand, according to the HP ESP’s &lt;a href=&quot;http://www.hpenterprisesecurity.com/collateral/report/2011FullYearCyberSecurityRisksReport.pdf&quot;&gt;2011 Top Cyber Security Risks Report&lt;/a&gt;, 5% of sampled applications are CORS-enabled, and 75% of them allow any domain to be able to communicate to scripts running on their domains.&lt;/p&gt;

&lt;p&gt;Going back to the question of statically scanning HTML5 applications for security vulnerabilities, I&#39;d like to point out that it&#39;s not trivial. Mostly due to the dynamic nature of JavaScript: doing dataflow analysis on callbacks and anonymous functions is a challenge. Nevertheless, we have begun to address some of the relevant features in one of our older releases, and our next rulepack update will contain support for CORS and client-side storage, and potentially others. So, stay tuned.&lt;/p&gt;
</description>
            <guid>http://blog.fortify.com/blog/2012/04/27/HTML5</guid>
			<pubDate>Fri, 27 Apr 2012 17:56:38 -0700</pubDate>
            <category>/Fortify/</category>
                                        <wfw:comment>http://blog.fortify.com/commentapi/default/Fortify/2012/04/27/HTML5</wfw:comment>
            <wfw:commentRss>http://blog.fortify.com/blog/2012/04/27/HTML5?page=comments&amp;flavor=rss2</wfw:commentRss>
                                </item>
                        <item>
            <title>RTA Customization: The power of being inside the application</title>
            <link>http://blog.fortify.com/blog/2012/04/13/RTA-Customization-The-power-of-being-inside-the-application</link>
            <description>HP Fortify RTA is very similar to a WAF, but it has one big advantage: Where a WAF protects outside of the perimeter, RTA protects from within the application. As always, we recommend to fix the known problems in code first, but when that’s not immediately possible, an RTA tool can help you out. On top of that, RTA can also be seen as an additional layer of protection.&lt;br&gt;&lt;br&gt;
In this blog post, I would like to show you an example of customization. More specific, let’s show an example how to protect by means of white-listing against command injection. Let’s say our customer has a web application which executes a couple of OS and other application commands where each command takes exactly one argument from the user. Taking data from the user, database, WS call or any other input and bluntly adding it to the command line will expose the application to command injection of course. &lt;br&gt;&lt;br&gt;
By default, RTA protects against Command Injection by parsing the command and validating it. However, as this default mechanisms does not take the entire context of the application in to consideration, it may be a good idea to add a white-listing rule to tighten the security. Assume that all commands executed in your application look like:&lt;br&gt;
&lt;ul&gt;	&lt;li&gt;
backup.exe user_provided_backup_file.backup&lt;/li&gt;
	&lt;li&gt;
ping user_provided_host_or_ip_address&lt;/li&gt;
	&lt;li&gt;
whois user_provided user_provided_domain_name	&lt;/li&gt;
	&lt;li&gt;…&lt;/li&gt;
&lt;/ul&gt;

&lt;br&gt;
Then, the following rule can be inserted:&lt;br&gt;&lt;br&gt;
&amp;lt;Rule&amp;gt;&lt;br&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;lt;RuleID&amp;gt;RULE_ID_CUSTOM1&amp;lt;/RuleID&amp;gt;&lt;br&gt;
&amp;#160;&amp;#160;&amp;#160;    &amp;lt;ProgramPoints&amp;gt;&lt;br&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;    &amp;lt;SetReference id=&quot;CommandInjection&quot;/&amp;gt;&lt;br&gt;
&amp;#160;&amp;#160;&amp;#160;    &amp;lt;/ProgramPoints&amp;gt;&lt;br&gt;
&amp;#160;&amp;#160;&amp;#160;    &amp;lt;Monitors&amp;gt;&lt;br&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;    &amp;lt;MonitorSpec class=&quot;com.fortify.runtime.monitor.Guard&quot; monitorID=&quot;MONITOR_ID_CUSTOM1&quot;&amp;gt;&lt;br&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;    &amp;lt;Attributes&amp;gt;&lt;br&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;    &amp;lt;Attribute name=&quot;category&quot;&amp;gt;Command Injection&amp;lt;/Attribute&amp;gt;&lt;br&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;    &amp;lt;/Attributes&amp;gt;&lt;br&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;    &amp;lt;Predicate&amp;gt;&lt;br&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;                not input matches /(backup\.exe|whois|ping) [^a-zA-Z0-9_\.\/\-]/&lt;br&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;    &amp;lt;/Predicate&amp;gt;&lt;br&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;    &amp;lt;Configuration&amp;gt;&lt;br&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;    &amp;lt;Property name=&quot;TriggerPicture&quot;&amp;gt;&lt;br&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;    &amp;lt;Value&amp;gt;The executed command %{input} did not match the predefined white-list&amp;lt;/Value&amp;gt;&lt;br&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;    &amp;lt;/Property&amp;gt;&lt;br&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;    &amp;lt;/Configuration&amp;gt;&lt;br&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;    &amp;lt;Bindings&amp;gt;&lt;br&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;    &amp;lt;Binding name=&quot;input&quot; capture-ref=&quot;execute&quot;/&amp;gt;&lt;br&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;    &amp;lt;/Bindings&amp;gt;&lt;br&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;    &amp;lt;/MonitorSpec&amp;gt;&lt;br&gt;
&amp;#160;&amp;#160;&amp;#160;    &amp;lt;/Monitors&amp;gt;&lt;br&gt;
&amp;lt;/Rule&amp;gt;&lt;br&gt;
&lt;br&gt;
Simply put, this rule will look at all the API’s that can lead to a Command Injection (like java.lang.runtime.Exec(), … ) and check if the executed command matches the predefined white-list ((backup\.exe|whois|ping) [^a-zA-Z0-9_\.\/\-]). If it does not match, the command will not be executed and an event will be generated which states that “The executed command %{input} did not match the predefined white-list”.


</description>
            <guid>http://blog.fortify.com/blog/2012/04/13/RTA-Customization-The-power-of-being-inside-the-application</guid>
			<pubDate>Fri, 13 Apr 2012 10:06:48 -0700</pubDate>
            <category>/Fortify/</category>
                                        <wfw:comment>http://blog.fortify.com/commentapi/default/Fortify/2012/04/13/RTA-Customization-The-power-of-being-inside-the-application</wfw:comment>
            <wfw:commentRss>http://blog.fortify.com/blog/2012/04/13/RTA-Customization-The-power-of-being-inside-the-application?page=comments&amp;flavor=rss2</wfw:commentRss>
                                </item>
                        <item>
            <title>Blackhat Europe 2012 roundup</title>
            <link>http://blog.fortify.com/blog/2012/03/19/Blackhat-Europe-2012-roundup</link>
            <description>Last couple of years, I&#39;ve seen various mobile talks which always attracted a lot of people and the mobile talks at Blackhat Europe weren&#39;t any different.
Actually, the mobile talks at Blackhat were different in another aspect. While most mobile talks have something interesting to say, they can only fascinate me for a portion of the talk. The content presented during the talks &quot;The Mobile Exploit Intelligence Project&quot; by Dan Guido and Mike Arpaia and &quot;The Heavy Metal That Poisoned the Droid&quot; by Tyrone Erasmus fascinated me from start to 
finish. While the first one determines in an intelligent way what attackers focus on, the latter gives you a collection of tools to gather runtime information from your Android. In two talks, you&#39;ll first of all understand from a high level what platform and information is most useful to an attacker and what kind of attacks are really out there. Second, you&#39;ll get an overview and demo on how secure the information is kept on one specific platform, the Android (which turns out to be the most likely attack platform for an attacker).
&lt;br&gt;&lt;br&gt;
Last but not least, I enjoyed the workshop Samurai WTF given by Justin Searle. Where distributions like Backtrack focus on network security, the Samurai WTF focuses on application security. While I&#39;ve literally spend days finding out which free tools and Firefox plugins I could use to make my life easier and get my work done, the Samurai WTF distribution simply gives you a liveCD with the free tools and even the plugins installed in Firefox ready to use.  So even if you think you&#39;re using the best free tools and plugins available right now, check out Samurai WTF and be surprised.
</description>
            <guid>http://blog.fortify.com/blog/2012/03/19/Blackhat-Europe-2012-roundup</guid>
			<pubDate>Mon, 19 Mar 2012 05:30:23 -0700</pubDate>
            <category>/Fortify/</category>
                                        <wfw:comment>http://blog.fortify.com/commentapi/default/Fortify/2012/03/19/Blackhat-Europe-2012-roundup</wfw:comment>
            <wfw:commentRss>http://blog.fortify.com/blog/2012/03/19/Blackhat-Europe-2012-roundup?page=comments&amp;flavor=rss2</wfw:commentRss>
                                </item>
                        <item>
            <title>RSA : End to End Security</title>
            <link>http://blog.fortify.com/blog/2012/03/15/CC3B2E5FC02BC301FE18FC1DD89E5CD4</link>
            <description>&lt;p&gt;
I attended three sessions at RSA in San Francisco last week. I started the day with an interesting presentation on embedded systems titled
&lt;a href=&quot;https://ae.rsaconference.com/US12/published/rsaus12/sessions/EXP-302/EXP-302.pdf&quot;&gt;&quot;Hacking Exposed: The Dark World of Tiny Systems and Big Hacks&quot;&lt;/a&gt; by Stuart McClure, CTO of McAfee. He shared real life 
examples of how vulnerable embedded systems can be and how far reaching the security 
breaches on these systems can be with our current day dependence on these tiny devices that are
present everywhere around us.&lt;/p&gt;
&lt;p&gt;
He discussed real life examples like a simple hijacking of a Red Cross donation poster by replacing a chip using NFC (Near
Field Communication) Technology and a sophisticated trojan mouse (the pointing device, not the animal) which could serve malicious websites and inject malware updates to the host.  But the two examples I related to the most involved consumer devices that all of us carry around (Android and iOS devices).  First, the demonstration of a seemingly harmless Android application requiring zero permissions from the user, opening up a Linux zero shell to acquire enhanced permission without 
the user knowledge or consent.  And second, the demonstration of how easily user data could be compromised on the iPad over a WiFi connection, due to an underlying vulnerability on the device.  The session concluded with McClure showing how medical devices, such as an insulin pump, can be remotely controlled to take cyber crimes to another level.&lt;/p&gt;

&lt;p&gt;
The &lt;a href=&quot;https://ae.rsaconference.com/US12/published/rsaus12/sessions/SPO1-303/SPO1-303.pdf&quot;&gt;second session&lt;/a&gt; by Tom Teller of Check Point Software Technologies, demonstrated a network application, called Protoleak, that used man-in-the-middle attacks on SSL to collect information leaked by everyday applications such as Facebook,
LinkedIn and Gmail. It was fascinating to see how, within minutes, the tool was able to successfully harvest and correlate the collected data to create what he called &quot;technical profiles&quot; of users on the network. &lt;/p&gt;
&lt;p&gt;
It struck me as I watched these two presentations that while we worry and hear a lot about security at the web and 
application level, this may not be sufficient. To successfully tackle security challenges in the future, we need to address 
end to end security for the system as a whole: device, network and application.  &lt;/p&gt;
</description>
            <guid>http://blog.fortify.com/blog/2012/03/15/CC3B2E5FC02BC301FE18FC1DD89E5CD4</guid>
			<pubDate>Thu, 15 Mar 2012 15:00:03 -0700</pubDate>
            <category>/Fortify/</category>
                                        <wfw:comment>http://blog.fortify.com/commentapi/default/Fortify/2012/03/15/CC3B2E5FC02BC301FE18FC1DD89E5CD4</wfw:comment>
            <wfw:commentRss>http://blog.fortify.com/blog/2012/03/15/CC3B2E5FC02BC301FE18FC1DD89E5CD4?page=comments&amp;flavor=rss2</wfw:commentRss>
                                </item>
                        <item>
            <title>RSA Roundup: SSL, and How to Annoy Your Attackers</title>
            <link>http://blog.fortify.com/blog/2012/03/15/2A495291EE4B6A4B1DF1E236BE1A3919</link>
            <description>&lt;p&gt;
Continuing with our series on RSA 2012, I had the opportunity to attend the final two days of the conference. I ended up staying for the closing keynote by Tony Blair, which was a real treat in itself, though his speech (unsurprisingly) only marginally touched upon security at all. However, his speech was widely covered and I will instead focus on the talks that I sat in on.
&lt;/p&gt;
&lt;p&gt;
I took this as an opportunity to branch out and opted for talks that focused on areas other than application security. My most memorable talk on Thursday was a rather amusing one, titled &lt;a href=&quot;https://ae.rsaconference.com/US12/published/rsaus12/sessions/STAR-303/STAR-303.pdf&quot;&gt;Offensive Countermeasures: Making Attackers Lives Miserable&lt;/a&gt;. What I found particularly interesting was that many of the methods in the presentation describe ways to exploit the attackers&#39; psyche, often using their very own methods against them. For instance, one countermeasure involved planting a deliberately malicious Java applet&amp;mdash;anything from a rootkit to something that helps identify who they are&amp;mdash;tucked away somewhere on a non-production server. As it turns out, computer illiterate users aren&#39;t the only ones who blindly click on &amp;quot;Run&amp;quot; on unknown Java applets. Many hackers are so curious to probe out the internals of a network that they are willing to run anything, &lt;em&gt;even if a browser pops up a warning&lt;/em&gt; about any unsigned Java applets. Talk about giving attackers a taste of their own medicine!
&lt;/p&gt;
&lt;p&gt;
My favorite talk on Friday described many of the issues with SSL, titled &lt;a href=&quot;https://ae.rsaconference.com/US12/published/rsaus12/sessions/TECH-403/TECH-403.pdf&quot;&gt;SSL and Browsers: The Pillars of Broken Security&lt;/a&gt;. It was the last session slot on the last day of the conference and packed to the brim. It certainly deserved the audience, as I felt it was very well-presented, organized, and informative. The crux of the issue is that SSL depends on several different entities working together, from the protocol designers themselves, to the vendors (both server and browser), to the CAs, to the sysadmins. Therefore, the protocol relies on each party to do its part correctly&amp;mdash;as the saying goes, the chain is as strong as the weakest link. The presenters then went on and described past failures in each part of the chain. It was certainly an eye-opening and alarming revelation how deep-seated the issues are, and I highly recommend checking this one out. If you&#39;re interested, one of the presenters, Ivan Ristić, also did &lt;a href=&quot;http://www.youtube.com/watch?v=qjj3ONoORuo&quot;&gt;a more detailed webcast at last year&#39;s RSA&lt;/a&gt; on this topic.
&lt;/p&gt;
&lt;p&gt;
In all, I had a great time at RSA, with quite fascinating speakers and panels. For someone as fresh out of university as myself, it was a great way to see all the different areas that security encompasses.
&lt;/p&gt;
</description>
            <guid>http://blog.fortify.com/blog/2012/03/15/2A495291EE4B6A4B1DF1E236BE1A3919</guid>
			<pubDate>Thu, 15 Mar 2012 11:44:48 -0700</pubDate>
            <category>/Fortify/</category>
                                        <wfw:comment>http://blog.fortify.com/commentapi/default/Fortify/2012/03/15/2A495291EE4B6A4B1DF1E236BE1A3919</wfw:comment>
            <wfw:commentRss>http://blog.fortify.com/blog/2012/03/15/2A495291EE4B6A4B1DF1E236BE1A3919?page=comments&amp;flavor=rss2</wfw:commentRss>
                                </item>
                        <item>
            <title>Secure in 2010? Broken in 2011!</title>
            <link>http://blog.fortify.com/blog/2012/03/12/Secure-in-2010-Broken-2011</link>
            <description>The time an application in production is secure can be very short! Check us out at Black Hat Europe, Thursday March 15 at 5pm where &lt;a href=&quot;https://www.blackhat.com/html/bh-eu-12/bh-eu-12-briefings.html#madou&quot;&gt;I&#39;ll be talking about Denial-of-Service attacks, gray box analysis and how it affects the security of a popular open source application called Apache OFBiz. &lt;/a&gt;
</description>
            <guid>http://blog.fortify.com/blog/2012/03/12/Secure-in-2010-Broken-2011</guid>
			<pubDate>Mon, 12 Mar 2012 08:54:17 -0700</pubDate>
            <category>/Fortify/</category>
                                        <wfw:comment>http://blog.fortify.com/commentapi/default/Fortify/2012/03/12/Secure-in-2010-Broken-2011</wfw:comment>
            <wfw:commentRss>http://blog.fortify.com/blog/2012/03/12/Secure-in-2010-Broken-2011?page=comments&amp;flavor=rss2</wfw:commentRss>
                                </item>
                        <item>
            <title>Vulnerabilities Enabling Mobile Exploits</title>
            <link>http://blog.fortify.com/blog/2012/03/09/Vulnerabilities-Enabling-Mobile-Exploits</link>
            <description>The group from CrowdStrike, headed up by Dmitri Alperovitch and George Kurtz, gave a great &lt;a href=&quot;https://ae.rsaconference.com/US12/published/rsaus12/sessions/HOT-203/HOT-203_final.pdf&quot;&gt;presentation&lt;/a&gt; on Remote Access Toolkits (RAT) relating to mobile platforms at RSA last week.  Underlying the “Hacking Exposed: Mobile RAT Edition” presentation was the deeply rooted issue of software vulnerabilities existing in software running on mobile platforms.  Specifically, CrowdStrike purchased 20 WebKit 1/2 day vulnerabilities, combined the browser attack with an existing root vulnerability exploit, used an APK ‘repurposed’ RAT, and some good old-fashioned hard work to make the RAT attack succeed.  When the presentation concluded with the communication of a mobile phone being monitored by a third party, without the knowledge of the phone&#39;s owner, there was little doubt in the room that the game had been taken to the next level.&lt;BR&gt;&lt;BR&gt;

The following two fundamental questions need to be asked as we deal with the hot topics of the year (obviously including Mobile and Cloud):&lt;BR&gt;
(1)    Can software or hardware vulnerabilities exist without an exploit?&lt;BR&gt;
(2)    Can software or hardware exploits exist without underlying vulnerabilities?&lt;BR&gt;&lt;BR&gt;

Since vulnerabilities can easily exist in systems, known or unknown at the present time, exploits simply may not have been created yet to take advantage of the underlying vulnerabilities. These previously unknown vulnerabilities are the basis of 0-day, 1/2-day, and 1-day vulnerabilities. Exploits, however, cannot be created without the necessary precondition of vulnerabilities existing in order for an exploit to be written.  The enabling factor of the RAT exploit that was demonstrated at RSA was a vulnerability existing in the software running on the mobile phone.  Without the vulnerability, the attack would not have been possible and the exploit therefore would not exist.&lt;BR&gt;&lt;BR&gt;

In summary, exploits rely on the existence of vulnerabilities in target systems.  As the landscape shifts to target Cloud and Mobile technology our focus on detecting, verifying, and removing exploitable vulnerabilities through tools and techniques built into a secure development lifecycle continues to be of critical importance.
</description>
            <guid>http://blog.fortify.com/blog/2012/03/09/Vulnerabilities-Enabling-Mobile-Exploits</guid>
			<pubDate>Fri, 9 Mar 2012 07:00:00 -0800</pubDate>
            <category>/Fortify/</category>
                                        <wfw:comment>http://blog.fortify.com/commentapi/default/Fortify/2012/03/09/Vulnerabilities-Enabling-Mobile-Exploits</wfw:comment>
            <wfw:commentRss>http://blog.fortify.com/blog/2012/03/09/Vulnerabilities-Enabling-Mobile-Exploits?page=comments&amp;flavor=rss2</wfw:commentRss>
                                </item>
                        <item>
            <title>RSA Cryptographers’ Panels</title>
            <link>http://blog.fortify.com/blog/2012/03/01/RSA-Cryptographers’-Panels</link>
            <description>&lt;p&gt;I spent Tuesday of this week at RSA Conference 2012 in San Francisco. Somehow, I ended up going to three panel discussions rather than actual talks. The most entertaining, in my opinion, was the Cryptographers&#39; Panel. To begin with, it had an outstanding list of panelists none of which require any special introductions: Whitfield Diffie (most know for Diffie-Hellman key exchange), Ron Rivest (the &quot;R&quot; co-author of RSA), Adi Shamir (the &quot;S&quot; co-author of RSA), and Stefan Savage  (most known for his work on network worms, malware propagation, and distributed denial of service attacks).&lt;/p&gt;

&lt;p&gt;The discussion started with dissection of a paper titled, appropriately for this panel, &lt;a href=&quot;http://eprint.iacr.org/2012/064.pdf&quot;&gt;&quot;Ron was wrong, Whit is right&quot;&lt;/a&gt;. The main idea behind the paper is to check how secure keys found in the wild are. Turns out that unlike keys that are used in Diffie-Hellman based algorithms, RSA keys available on the internet are less secure: two out of about one thousand public keys share common factors, probably due to insecure random number generators used for their creation. Another point raised during this discussion was the fact that there are no studies of malicious pseudo-random number generators, and that in general, traditional cryptography is based on the assumption that the keys are secure and are kept secure, which is clearly not the case. Defining a model for cryptanalysis in which this assumption does not hold is one of Shamir&#39;s latest research areas.&lt;/p&gt;

&lt;p&gt;A number of other interesting questions were brought up. Savage and Shamir disagreed on whether it&#39;s harder to keep secrets now, with Stefan saying &quot;no&quot;, and Adi saying &quot;yes&quot;.  However, all agreed that while cybersecurity will never become a science, security practitioners should apply scientific methods, such as rigorous gathering of experimental data, to many more scenarios than we do now.&lt;/p&gt;

&lt;p&gt;The panelists also highlighted several major achievements that have occurred in the world of theoretical cryptography recently. The list is topped by the first key recovery attack on the full AES-128, which you can read about &lt;a href=&quot;http://research.microsoft.com/en-us/projects/cryptanalysis/aesbc.pdf&quot;&gt;here&lt;/a&gt;. This is huge, even though it is not practically possible! The next one is the fact that ГОСТ – the Russian alternative to triple DES and AES-256 -- has also been theoretically &lt;a href=&quot;http://eprint.iacr.org/2011/211.pdf&quot;&gt;broken&lt;/a&gt; in May 2011 after being thought secure for the past 20 years. Finally, SHA-3 competition is down to &lt;a href=&quot;http://csrc.nist.gov/groups/ST/hash/sha-3/Round3/submissions_rnd3.html&quot;&gt;5 finalists&lt;/a&gt;, and the winner should be announced later this year.&lt;/p&gt;

&lt;p&gt;In the closing remarks, Rivest and Shamir touched upon more down to earth topics. Being one of the biggest names behind research in electronic voting, Rivest emphasized once again that online voting is a bad idea, and that we are simply not ready for it. And Shamir ridiculed Iranian government for shutting down internet access to its citizens.&lt;/p&gt;

&lt;p&gt;All in all, it was a great discussion, which led me to the following thought: even though the number of security breaches rises with every year, none of these breaches have anything to do with breaking cryptographic algorithms. Even though, both AES-128 and ГОСТ have been broken, it’s nothing to lose your sleep over because the attacks are not possible in practice. This means that we&#39;re doing well on the crypto side. This is an incredible achievement! Of course, the other side of the coin is less bright – application-level flaws are still a problem and are usually the causes of these breaches. Which is why we are still here, doing our job at HP Fortify.&lt;/p&gt;
</description>
            <guid>http://blog.fortify.com/blog/2012/03/01/RSA-Cryptographers’-Panels</guid>
			<pubDate>Thu, 1 Mar 2012 11:28:31 -0800</pubDate>
            <category>/Fortify/</category>
                                        <wfw:comment>http://blog.fortify.com/commentapi/default/Fortify/2012/03/01/RSA-Cryptographers’-Panels</wfw:comment>
            <wfw:commentRss>http://blog.fortify.com/blog/2012/03/01/RSA-Cryptographers’-Panels?page=comments&amp;flavor=rss2</wfw:commentRss>
                                </item>
                        <item>
            <title>Q1 2012 Update</title>
            <link>http://blog.fortify.com/blog/2012/02/29/Q1-2012-Update</link>
            <description>&lt;p&gt;One of the primary responsibilities of the Security Research Group is keeping the security content of our products up to date. Today we released the first quarterly release of 2012, which includes updates to our static analysis, a new runtime product, and additional premium content for our customers. Details below:&lt;/p&gt;

&lt;p&gt;&lt;b&gt;HP Fortify Secure Coding Rulepacks&lt;/b&gt;- The Fortify Secure Coding Rulepacks detect 503 unique categories of vulnerabilities across 20 programming languages and over 705,000 individual APIs.  In summary, our latest update includes the following exciting features:&lt;/p&gt;

&lt;ul&gt;
	&lt;li&gt;&lt;b&gt;Microsoft .NET MVC&lt;/b&gt; - Support identifies database, environment and web input in .NET MVC applications and assist in identifying issues across common dataflow categories, including Cross-Site Scripting and SQL Injection.&lt;/li&gt;

	&lt;li&gt;&lt;b&gt;Context-Sensitive Ranking (CSR): Number Input&lt;/b&gt; - Issues produced by tainted numeric values are now reported at a reduced priority, which allows less dangerous issues to be easily triaged and handled differently than those originating from tainted string or object data. This capability impacts the following six vulnerability categories in all supported languages: Command Injection, Dangerous File Inclusion, Header Manipulation, Path Manipulation, XML Injection and XPath Injection.&lt;/li&gt;

	&lt;li&gt;&lt;b&gt;HP Fortify Java Annotations&lt;/b&gt; - The latest version of HP Fortifyâs Java annotations identify dataflow sources, sinks, and passthroughs by annotating method parameters.  A lightweight alternative to custom rules, this feature allows developers to model custom APIs for analysis without leaving their code. Categories supported include Cross-Site Scripting, SQL Injection, Command Injection and Privacy Violation. The ability to identify and cleanse web, database, private data, and file system taint is also included in this update.&lt;/li&gt;

&lt;li&gt;&lt;b&gt;Contextual Remediation Guidance&lt;/b&gt; - Vulnerability descriptions have been updated to provide context-sensitive examples and remediation guidance specific individual issues. Whenever possible, framework-specific examples are provided for the following categories: Cross-Site Scripting, SQL Injection, and Access Control: Database.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;b&gt;HP Application Security Monitor (AppSM) Runtime Rulepack Kit&lt;/b&gt; - The latest addition to the runtime family integrates HP Fortify Real-Time Analyzer (RTA) with HP ArcSight Enterprise Security Manager (ESM) to give IT real-time visibility into application security threats. HP AppSM delivers centralized searching, reporting and analysis while covering applications in most popular Java and Microsoft .NET configurations. This rulepack kit, integrated with HP AppSM, monitors applications for many common attacks as well as the following forensic events:
&lt;ul&gt;
        &lt;li&gt;Context and session start and stop&lt;/li&gt;
	&lt;li&gt;User Logon and Logoff&lt;/li&gt;
	&lt;li&gt;File create, delete, read, and write&lt;/li&gt;
	&lt;li&gt;Socket bind, connect, shutdown, and close&lt;/li&gt;
	&lt;li&gt;Process create&lt;/li&gt;
	&lt;li&gt;Registry create, delete, read, and write&lt;/li&gt;
	&lt;li&gt;Framework validation failures&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;b&gt;PCI DSS 2.0 Report&lt;/b&gt; - Support for the latest version of the Payment Card Industry&#39;s Data Security Standards. Available soon through Premium Content.&lt;/p&gt;
</description>
            <guid>http://blog.fortify.com/blog/2012/02/29/Q1-2012-Update</guid>
			<pubDate>Wed, 29 Feb 2012 18:07:21 -0800</pubDate>
            <category>/Fortify/</category>
                                        <wfw:comment>http://blog.fortify.com/commentapi/default/Fortify/2012/02/29/Q1-2012-Update</wfw:comment>
            <wfw:commentRss>http://blog.fortify.com/blog/2012/02/29/Q1-2012-Update?page=comments&amp;flavor=rss2</wfw:commentRss>
                                </item>
                        <item>
            <title>Mobile Operating Systems and their Role in Security</title>
            <link>http://blog.fortify.com/blog/2012/02/16/Mobile-Operating-Systems-and-their-Role-in-Security</link>
            <description>About a month ago the NSA released &lt;a href=&quot;http://selinuxproject.org/page/SEAndroid&quot;&gt;SEAndroid&lt;/a&gt;, a hardened version of Google Android based on &lt;a href=&quot;http://www.nsa.gov/research/selinux/&quot;&gt;SELinux&lt;/a&gt; (Security-Enhanced Linux). The focus of the first release is to limit the damage a malicious or inadvertently vulnerable app might cause to other apps or the underlying operating system. This effort is likely to call attention to the substantial differences surrounding communication and permissions between Apple IOS and Google Android. Of even more interest, however, is the question of how much of the security problem can be addressed by platform vendors at all? &lt;/p&gt;&lt;p&gt;
As we saw with Microsoft’s push on Windows security in the early 2000s, building a more secure operating system isn’t enough to secure the software systems running on them. In the same way early users of the Web had to learn not to download and run arbitrary software of unknown provenance, securing our mobile devices is going to require a combination well-though out platforms, secure applications, as well as the right processes and technologies to ensure both are built, configured and used securely. 
&lt;/p&gt;
&lt;p&gt;
The question I’m most interested in is where will corporate users get their apps from? Some large enterprises are creating private app stores for their employees. A major driver behind this is to leverage shared buying power for discounts on commonly used apps, but the potential to enforce a corporate security policy on app downloads offers a tangible benefit. What sorts of assurance can or should secure app stores provide? Will generic providers like Apple and Google follow suit and use security as a differentiator? Only time will tell, but it’s certainly going to be fun figuring out the answers. 
&lt;/p&gt;
&lt;/p&gt;
If you want to discuss this or other mobile security topics, join me at RSA Conference 2012 where I’m telling the Software Security Goes Mobile story on Tuesday 2/28 at 2:40PM in Orange Room 302 or the ISB White Boarding session on the same subject on Monday 2/27 at 4:30PM in Moscone North Hall E Room 134. 
&lt;/p&gt;
</description>
            <guid>http://blog.fortify.com/blog/2012/02/16/Mobile-Operating-Systems-and-their-Role-in-Security</guid>
			<pubDate>Thu, 16 Feb 2012 15:26:21 -0800</pubDate>
            <category>/Fortify/</category>
                                        <wfw:comment>http://blog.fortify.com/commentapi/default/Fortify/2012/02/16/Mobile-Operating-Systems-and-their-Role-in-Security</wfw:comment>
            <wfw:commentRss>http://blog.fortify.com/blog/2012/02/16/Mobile-Operating-Systems-and-their-Role-in-Security?page=comments&amp;flavor=rss2</wfw:commentRss>
                                </item>
                        <item>
            <title>Handling Session Statically </title>
            <link>http://blog.fortify.com/blog/2012/02/10/Handling-Session-Statically</link>
            <description>&lt;p&gt;Time and time again, customers complain about our static analyzer doing a poor job of doing dataflow analysis through the HTTP session. We do acknowledge our customers’ concern, and figuring out how to do a better job of tracking taint that marks untrusted data through the session attributes maps is the focus of an on-going research and improvement on our end. This actually turns out to be a non-trivial problem in the general sense, and the focus of our research is tuning the rules and the engine to improve our analysis in specific scenarios.&lt;/p&gt;

&lt;p&gt;I thought it would be interesting and useful to look at the history of our session support, see how it evolved over the years, and understand where we currently stand. So, let’s start by looking at a very simple example.&lt;/p&gt;

&lt;code&gt;
&amp;lt;%
&lt;br/&gt;&amp;nbsp;&amp;nbsp;taint = request.getParameter(&quot;foo&quot;); 
&lt;br/&gt;&amp;nbsp;&amp;nbsp;session.setAttribute(&quot;foo&quot;, taint);
&lt;br/&gt;&amp;nbsp;&amp;nbsp;t = session.getAttribute(&quot;foo&quot;);
&lt;br/&gt;&amp;nbsp;&amp;nbsp;out.println(t);
&lt;br/&gt;%&amp;gt; 
&lt;/code&gt;

&lt;p&gt;In the example above, we have untrusted data enter the application via an HTTP request parameter. The data get put into an HTTP session map as an attribute with the key &lt;code&gt;&quot;foo&quot;&lt;/code&gt; without being validated. Then the data are retrieved from the session and, again, without being validated, are printed to the page. This is a classic cross-site scripting vulnerability, which we would like to be able to detect statically. Our original solution consisted in writing four rules that drive the detection of the vulnerability by the engine: 

&lt;ol&gt;
  &lt;li&gt; Source rule for the return of the &lt;code&gt;getParameter(...)&lt;/code&gt; call,&lt;/li&gt;
  &lt;li&gt;Passthrough rule that propagates taint from &lt;code&gt;taint&lt;/code&gt; to &lt;code&gt;session&lt;/code&gt; on the &lt;code&gt;setAttribute(...)&lt;/code&gt; call,&lt;/li&gt;
  &lt;li&gt;Passthrough rule that propagates taint from &lt;code&gt;session&lt;/code&gt; to the return of the &lt;code&gt;getAttribute(...)&lt;/code&gt; call, and&lt;/li&gt;
  &lt;li&gt;Sink rule that actually generates a vulnerability at the &lt;code&gt;println(...)&lt;/code&gt; call.&lt;/li&gt;
&lt;/ol&gt;

This was a good start, however the approach results in the entire session object becoming tainted even if only one of its attributes is tainted. This means that the analyzer reported a vulnerability even in the example below, where the retrieved attribute is different from the one that was put into the session as untrusted.&lt;/p&gt;

&lt;code&gt;
&amp;lt;%
&lt;br/&gt;&amp;nbsp;&amp;nbsp;taint = request.getParameter(&quot;foo&quot;); 
&lt;br/&gt;&amp;nbsp;&amp;nbsp;session.setAttribute(&quot;foo&quot;, taint);
&lt;br/&gt;&amp;nbsp;&amp;nbsp;t = session.getAttribute(&quot;bar&quot;);
&lt;br/&gt;&amp;nbsp;&amp;nbsp;out.println(t);
&lt;br/&gt;%&amp;gt; 
&lt;/code&gt;

&lt;p&gt;In order to get rid of false positives like the ones shown above, we enhanced the engine to do simple tracking of attribute keys in the case where they are known statically. If the keys are not statically known, then the original solution becomes a fall back mechanism.&lt;/p&gt;

&lt;p&gt;One important thing to point out is that code in both examples above executes in the context of the same JSP page. For the purposes of this discussion, this means that the same session object is used to both put attributes into the session and retrieve them from it. Correctly handling  a more complicated example like the one below becomes tricky.&lt;/p&gt;

&lt;code&gt;
&lt;b&gt;JSP Page 1:&lt;/b&gt;
&lt;br/&gt;&amp;lt;%
&lt;br/&gt;&amp;nbsp;&amp;nbsp;taint = request.getParameter(&quot;foo&quot;); 
&lt;br/&gt;&amp;nbsp;&amp;nbsp;session.setAttribute(&quot;foo&quot;, taint);
&lt;br/&gt;%&amp;gt; 
&lt;br/&gt;
&lt;br/&gt;&lt;b&gt;JSP Page 2:&lt;/b&gt;
&lt;br/&gt;&amp;lt;%
&lt;br/&gt;&amp;nbsp;&amp;nbsp;t = session.getAttribute(&quot;foo&quot;);
&lt;br/&gt;&amp;nbsp;&amp;nbsp;out.println(t);
&lt;br/&gt;%&amp;gt; 
&lt;/code&gt;

&lt;p&gt;Before being analyzed, JSP pages get translated into Java classes, and the analysis is performed on the generated Java code. Each page becomes a separate class with its own instance variables and fields. Each of these classes will have access to its own session object, which means that tracking taint across pages is impossible with the approach described above, unless the engine is enhanced once again in some clever way. This is exactly what happened, and this is where we are today. There is now a new type of rule that can specify to the engine that all instances of a particular class (in this case, the session class) should be treated as the same instance.&lt;/p&gt;

&lt;p&gt;As I said earlier, we are constantly working on finding ways to improve our static results, and this chronicle of our session support is a good example of our progress.&lt;/p&gt;
</description>
            <guid>http://blog.fortify.com/blog/2012/02/10/Handling-Session-Statically</guid>
			<pubDate>Fri, 10 Feb 2012 14:38:17 -0800</pubDate>
            <category>/Fortify/</category>
                                        <wfw:comment>http://blog.fortify.com/commentapi/default/Fortify/2012/02/10/Handling-Session-Statically</wfw:comment>
            <wfw:commentRss>http://blog.fortify.com/blog/2012/02/10/Handling-Session-Statically?page=comments&amp;flavor=rss2</wfw:commentRss>
                                </item>
                        <item>
            <title>Voices that Matter: Katrina O&#39;Neil on Building Secure Android Apps</title>
            <link>http://blog.fortify.com/blog/2012/01/11/Voices-that-Matter-Katrina-ONeil-on-Buildinig-Secure-Android-Apps-1</link>
            <description>&lt;img src=&quot;http://voicesthatmatter.com/android2012/images/header/logo.gif&quot; alt=&quot;Voices that Matter: Android Developers Conference&quot;/&gt;
&lt;br&gt;
&lt;br&gt;
&lt;a href=&quot;http://android2012.voicesthatmatter.com/speakers/20634&quot;&gt;Katrina O&#39;Neil&lt;/a&gt;, the founding member of HP Fortify&#39;s Security Research Group, will be speaking on &lt;a href=&quot;http://android2012.voicesthatmatter.com/talks/24522&quot;&gt;Building Secure Android Apps&lt;/a&gt; at the &lt;a href=&quot;http://android2012.voicesthatmatter.com/&quot;&gt;Voices that Matter: Android Developers Conference&lt;/a&gt; in San Francisco from 11:30 - 12:45pm on Friday, February 10. Specifically, the talk will spend 75 minutes covering the following:
&lt;blockquote&gt;&lt;br&gt;
According to Google, Android was designed to give mobile developers “an excellent software platform for everyday users” on which to build rich applications for the growing mobile device market. The power and flexibility of the Android platform are undeniable, but where does it leave developers when it comes to security?
&lt;br&gt;&lt;br&gt;
In this talk we discuss seven of the most interesting code-level security mistakes we’ve seen developers make in Android applications. We cover common errors ranging from the promiscuous or incorrect use of Android permissions to lax input validation that enables a host of exploits, such as query string injection. We discuss the root cause of each vulnerability, describe how attackers might exploit it, and share the results of our research applying static analysis to identify the issue. Specifically, we will show our successes and failures using static analysis to identify each type of vulnerability in real-world Android applications. &lt;/blockquote&gt;

&lt;br&gt;
For a special early-bird discount, please use the &lt;strong&gt;priority code ANDSP36 and register for the conference before Friday the 13th of January.&lt;/strong&gt; 
</description>
            <guid>http://blog.fortify.com/blog/2012/01/11/Voices-that-Matter-Katrina-ONeil-on-Buildinig-Secure-Android-Apps-1</guid>
			<pubDate>Wed, 11 Jan 2012 16:03:53 -0800</pubDate>
            <category>/Fortify/</category>
                                        <wfw:comment>http://blog.fortify.com/commentapi/default/Fortify/2012/01/11/Voices-that-Matter-Katrina-ONeil-on-Buildinig-Secure-Android-Apps-1</wfw:comment>
            <wfw:commentRss>http://blog.fortify.com/blog/2012/01/11/Voices-that-Matter-Katrina-ONeil-on-Buildinig-Secure-Android-Apps-1?page=comments&amp;flavor=rss2</wfw:commentRss>
                                </item>
                        <item>
            <title>JavaScript With No Letters or Numbers (and what it teaches us about JavaScript security)</title>
            <link>http://blog.fortify.com/blog/2011/12/27/JavaScript-With-No-Letters-or-Numbers-and-what-it-teaches-us-about-JavaScript-security</link>
            <description>&lt;p&gt;
At the HP Fortify office, we have a casual event every week where the company orders lunch and a brave soul gives a presentation on a subject of interest. It&#39;s where we all come for the food and stay for the cool stuff we learn. One of the topics from a while ago was an overview of &lt;a href=&quot;http://vimeo.com/15961577&quot;&gt;Joey Tyson&#39;s talk at NoVa Hackers&lt;/a&gt;. I think the video is well worth a watch, because he does a great job at presenting the material in a both entertaining and educational way. It has become one of my favorite links to share with my tech-savvy friends, as it showcases all the fun (and frightening) things we can do with JavaScript.
&lt;/p&gt;

&lt;p&gt;
The video looks at ways to abuse the loose typing and dynamic nature of JavaScript to produce heavily obfuscated code. I&#39;ll let you watch for yourselves, as he explains the topic much better than I can. Instead, I will focus on discussing the morals of the story. What do such &quot;powers&quot; of JavaScript mean for us security-minded folks?
&lt;/p&gt;

&lt;h5&gt;Code Execution&lt;/h5&gt;
&lt;p&gt;
One of the main points of the talk was highlighting the many ways to turn a string into executable code. From a security standpoint, this is the backbone of injection vulnerabilities, such as DOM-based XSS. DOM-based XSS is a type of cross-site scripting vulnerability that appears and is exploited entirely on the client-side—typically entirely in JavaScript. This is in contrast with reflected and persistent XSS, which are server-side vulnerabilities. &lt;/p&gt;

&lt;p&gt;
The most obvious way for an attacker to execute code is using functions made just for this - &lt;code&gt;eval()&lt;/code&gt;, &lt;code&gt;setTimeout()&lt;/code&gt;, &lt;code&gt;new Function()&lt;/code&gt;, and so forth. In a similar vein, though not covered in the talk, event handlers for DOM objects - e.g., &lt;code&gt;window.attachEvent()&lt;/code&gt;, assignments to &lt;code&gt;document.forms[0].action&lt;/code&gt; - achieve the same effect. Of course, simply writing out the stream without any sort of validation - &lt;code&gt;document.write()&lt;/code&gt; or &lt;code&gt;DOMObj.innerHTML&lt;/code&gt; - is the classic XSS attack. Those who know or have experienced a little bit of Web history will know that browsers accept URIs prepended with &quot;&lt;code&gt;javascript:&lt;/code&gt;&quot; and execute them as JavaScript code. Attackers often use this to their advantage to redirect victims to a &quot;&lt;code&gt;javascript:&lt;/code&gt;&quot; URL.
&lt;/p&gt;

&lt;p&gt;
The talk also discusses another, less obvious way, to inject code. In browsers, the global namespace resides in the &lt;code&gt;window&lt;/code&gt; object, so that if we have access to the &lt;code&gt;window&lt;/code&gt; object, we can call on anything within it, including functions. Furthermore, in JavaScript, &lt;code&gt;window[&#39;foo&#39;]&lt;/code&gt; is identical to &lt;code&gt;window.foo&lt;/code&gt;. Thus, if an attacker were ever in a position to control the value of &lt;code&gt;x&lt;/code&gt; in &lt;code&gt;window[x]()&lt;/code&gt;, he would be able to successfully launch a cross-site scripting attack.
&lt;/p&gt;

&lt;p&gt;
In short, JavaScript&#39;s flexibility allows for many different and often subtle ways to execute a string as code. Web application developers need to be especially careful to dodge the many avenues for XSS execution.
&lt;/p&gt;

&lt;h5&gt;Attack strings in URLs&lt;/h5&gt;
&lt;p&gt;
The canonical XSS attack involves embedding the payload in the URL of the page that eventually gets executed via one of the methods above. In DOM-based XSS, the practice is no different. In the JavaScript talk, the presenter spends a good amount of time discussing different ways to embed code in the URL. It&#39;s a very common and easy way to pass malicious code to the victim&#39;s browser.
&lt;/p&gt;

&lt;p&gt;
What this means for us that we need to be especially careful when reading URL values out of the page. This often means reading &lt;code&gt;window.location&lt;/code&gt; or its properties, such as &lt;code&gt;window.location.href&lt;/code&gt;, &lt;code&gt;window.location.hash&lt;/code&gt;, or &lt;code&gt;window.location.search&lt;/code&gt;. The data therein may well contain an XSS attack string, so it is always crucial to validate any data that your code reads out of these objects.
&lt;/p&gt;

&lt;h5&gt;Escaping and blacklisting characters are insufficient&lt;/h5&gt;
&lt;p&gt;
The techniques in the talk are concrete examples of why escaping or blacklisting individual characters is not enough to prevent cross-site scripting attacks. The presenter was able to give several different character sets that enable arbitrary script execution. With a highly flexible language like JavaScript, it&#39;s often possible for an attacker to circumvent blacklisted characters, yet it&#39;s very difficult for a developer to be aware of and defend against &lt;i&gt;every&lt;/i&gt; means of code injection.
&lt;/p&gt;

&lt;p&gt;
In general, whitelisting is an almost certainly better alternative to blacklisting. It is easier for us to justify any options we explicitly allow, than to try to enumerate and account for every possibility to disallow. Rejecting certain characters or names can help prevent the most basic code injection attacks, but will not guard against obfuscated payload strings.
&lt;/p&gt;

&lt;p&gt;
&lt;/p&gt;

&lt;p&gt;
Lastly, in spirit of the holiday season, I&#39;ll leave you with something a little more whimsical. Yosuke Hasegawa is one of the earliest and most prominent JavaScript gurus to bend and abuse the language in various ways. He has written (in JavaScript, of course), among other things, a &lt;a href=&quot;http://utf-8.jp/public/aaencode.html&quot;&gt;JavaScript-to-Japanese-Smileys&lt;/a&gt; encoder - if you happen to be a fan of Japanese emoticons.
&lt;/p&gt;

&lt;p&gt;
Happy Holidays!
&lt;/p&gt;
</description>
            <guid>http://blog.fortify.com/blog/2011/12/27/JavaScript-With-No-Letters-or-Numbers-and-what-it-teaches-us-about-JavaScript-security</guid>
			<pubDate>Tue, 27 Dec 2011 04:25:28 -0800</pubDate>
            <category>/Fortify/</category>
                                        <wfw:comment>http://blog.fortify.com/commentapi/default/Fortify/2011/12/27/JavaScript-With-No-Letters-or-Numbers-and-what-it-teaches-us-about-JavaScript-security</wfw:comment>
            <wfw:commentRss>http://blog.fortify.com/blog/2011/12/27/JavaScript-With-No-Letters-or-Numbers-and-what-it-teaches-us-about-JavaScript-security?page=comments&amp;flavor=rss2</wfw:commentRss>
                                </item>
                        <item>
            <title>Let’s Talk About Overprivilege</title>
            <link>http://blog.fortify.com/blog/2011/12/16/Let’s-Talk-About-Overprivilege</link>
            <description>&lt;p&gt;Our collaboration on Google Android with UC Berkeley is an example of a very successful endeavor: as of Q4’11 update to the HP Fortify Secure Coding Rulepacks, we can statically detect overprivileged Android applications. But what does overprivilege mean in the world of Android?&lt;/p&gt;

&lt;p&gt;As part of its security model, Google Android platform defines an elaborate system of permissions. Permissions can protect access to three things:

&lt;ol&gt;
  &lt;li&gt;Sensitive APIs,&lt;/li&gt;
  &lt;li&gt;Application components (e.g. content providers), and&lt;/li&gt;
  &lt;li&gt;Inter-and-intra-component communication.&lt;/li&gt;
&lt;/ol&gt;

Sensitive APIs allow developers to access important services provided by the platform, such as accessing the Internet and sending SMS messages. Content providers serve as application internal databases, while a communication system lets internal and external components send messages to each other. In order to use privileged platform services, Android applications have to explicitly request permissions at install time, which is when it’s also decided whether they are granted or denied. The enforcement happens at runtime.&lt;/p&gt;

&lt;p&gt;If an application requests too few permissions, it is underprivileged and won’t be able to execute correctly because privileged calls will fail at runtime. This problem is much easier to detect during testing than the problem of overprivilege – that is, an application requesting more permissions than it needs. Overprivilege is bad for a number of reasons, the first one being violation of the principle of least privilege that says that one should not have more authority than he or she needs in order to perform a task. If the same application has other vulnerabilities, an attacker who exploits them and takes control of the application will have the same permissions the application requested, and therefore can further misuse them. Also, overprivileged applications make it easier for the end-user to end up with malware on their device because many users can become desensitized by benign applications requesting scary permissions. On the other hand, overprivileged applications can scare away security-savvy users from downloading benign applications just because they request more permissions than they need.&lt;/p&gt;

&lt;p&gt;Our analysis of real-world Android applications showed that over 30% of all the apps we looked at are overprivileged. The most shocking cause of overprivilege is the lack of documentation from Google: as determined by our Berkeley colleagues, version 2.2 of the platform documents permission requirements for only 78 out of 1207 API calls, and 6 out of these 78 instances turned out to be incorrect. Developers are left with either figuring out permission requirements by trial and error or turning to forums and message boards, which often provide incorrect answers as well.&lt;/p&gt;

&lt;p&gt;Static analysis is faced with some challenges when detecting overprivilege in Android applications. Specifically, aggressive use of third-party APIs (e.g. advertising APIs) and Java reflection API may result in false alarms. However, we think that static analysis can still be of great help to developers, so please take advantage of this new and exciting capability from the HP Fortify SCA.&lt;/p&gt;
</description>
            <guid>http://blog.fortify.com/blog/2011/12/16/Let’s-Talk-About-Overprivilege</guid>
			<pubDate>Fri, 16 Dec 2011 11:15:06 -0800</pubDate>
            <category>/Fortify/</category>
                                        <wfw:comment>http://blog.fortify.com/commentapi/default/Fortify/2011/12/16/Let’s-Talk-About-Overprivilege</wfw:comment>
            <wfw:commentRss>http://blog.fortify.com/blog/2011/12/16/Let’s-Talk-About-Overprivilege?page=comments&amp;flavor=rss2</wfw:commentRss>
                                </item>
                        <item>
            <title>Watch Us on YouTube</title>
            <link>http://blog.fortify.com/blog/2011/12/05/7E1BEE4D2FE6F0878E6475C8384037AC</link>
            <description>Remember our DEFCON talk on Android that we talked about &lt;a href=&quot;http://blog.fortify.com/blog/Fortify/2011/08/19/Seven-Ways-to-Hang-Yourself-with-Google-Android&quot;&gt;here&lt;/a&gt;? Now you can watch it on YouTube -- &lt;a href=&quot;http://www.youtube.com/watch?v=bdewgyyAcek&quot;&gt;enjoy&lt;/a&gt;!
</description>
            <guid>http://blog.fortify.com/blog/2011/12/05/7E1BEE4D2FE6F0878E6475C8384037AC</guid>
			<pubDate>Mon, 5 Dec 2011 12:56:11 -0800</pubDate>
            <category>/Fortify/</category>
                                        <wfw:comment>http://blog.fortify.com/commentapi/default/Fortify/2011/12/05/7E1BEE4D2FE6F0878E6475C8384037AC</wfw:comment>
            <wfw:commentRss>http://blog.fortify.com/blog/2011/12/05/7E1BEE4D2FE6F0878E6475C8384037AC?page=comments&amp;flavor=rss2</wfw:commentRss>
                                </item>
                        <item>
            <title>Application Frameworks and Static Analysis (Part Ein)</title>
            <link>http://blog.fortify.com/blog/2011/12/02/Application-Frameworks-and-Static-Analysis-Part-Ein</link>
            <description>&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv=Content-Type content=&quot;text/html; charset=windows-1252&quot;&gt;
&lt;meta name=Generator content=&quot;Microsoft Word 12 (filtered)&quot;&gt;
&lt;style&gt;
&lt;!--
 /* Font Definitions */
 @font-face
	{font-family:&quot;Cambria Math&quot;;
	panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
	{font-family:Cambria;
	panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
	{font-family:Calibri;
	panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
	{font-family:Tahoma;
	panose-1:2 11 6 4 3 5 4 4 2 4;}
 /* Style Definitions */
 p.MsoNormal, li.MsoNormal, div.MsoNormal
	{margin-top:0in;
	margin-right:0in;
	margin-bottom:10.0pt;
	margin-left:0in;
	line-height:115%;
	font-size:11.0pt;
	font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;}
h1
	{mso-style-link:&quot;Heading 1 Char&quot;;
	margin-top:24.0pt;
	margin-right:0in;
	margin-bottom:0in;
	margin-left:0in;
	margin-bottom:.0001pt;
	line-height:115%;
	page-break-after:avoid;
	font-size:14.0pt;
	font-family:&quot;Cambria&quot;,&quot;serif&quot;;
	color:#365F91;}
h2
	{mso-style-link:&quot;Heading 2 Char&quot;;
	margin-top:10.0pt;
	margin-right:0in;
	margin-bottom:0in;
	margin-left:0in;
	margin-bottom:.0001pt;
	line-height:115%;
	page-break-after:avoid;
	font-size:13.0pt;
	font-family:&quot;Cambria&quot;,&quot;serif&quot;;
	color:#4F81BD;}
h3
	{mso-style-link:&quot;Heading 3 Char&quot;;
	margin-top:10.0pt;
	margin-right:0in;
	margin-bottom:0in;
	margin-left:0in;
	margin-bottom:.0001pt;
	line-height:115%;
	page-break-after:avoid;
	font-size:11.0pt;
	font-family:&quot;Cambria&quot;,&quot;serif&quot;;
	color:#4F81BD;}
a:link, span.MsoHyperlink
	{color:blue;
	text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
	{color:purple;
	text-decoration:underline;}
pre
	{mso-style-link:&quot;HTML Preformatted Char&quot;;
	margin:0in;
	margin-bottom:.0001pt;
	font-size:10.0pt;
	font-family:&quot;Courier New&quot;;}
p.MsoAcetate, li.MsoAcetate, div.MsoAcetate
	{mso-style-link:&quot;Balloon Text Char&quot;;
	margin:0in;
	margin-bottom:.0001pt;
	font-size:8.0pt;
	font-family:&quot;Tahoma&quot;,&quot;sans-serif&quot;;}
span.Heading1Char
	{mso-style-name:&quot;Heading 1 Char&quot;;
	mso-style-link:&quot;Heading 1&quot;;
	font-family:&quot;Cambria&quot;,&quot;serif&quot;;
	color:#365F91;
	font-weight:bold;}
span.Heading2Char
	{mso-style-name:&quot;Heading 2 Char&quot;;
	mso-style-link:&quot;Heading 2&quot;;
	font-family:&quot;Cambria&quot;,&quot;serif&quot;;
	color:#4F81BD;
	font-weight:bold;}
span.BalloonTextChar
	{mso-style-name:&quot;Balloon Text Char&quot;;
	mso-style-link:&quot;Balloon Text&quot;;
	font-family:&quot;Tahoma&quot;,&quot;sans-serif&quot;;}
span.Heading3Char
	{mso-style-name:&quot;Heading 3 Char&quot;;
	mso-style-link:&quot;Heading 3&quot;;
	font-family:&quot;Cambria&quot;,&quot;serif&quot;;
	color:#4F81BD;
	font-weight:bold;}
span.HTMLPreformattedChar
	{mso-style-name:&quot;HTML Preformatted Char&quot;;
	mso-style-link:&quot;HTML Preformatted&quot;;
	font-family:&quot;Courier New&quot;;}
span.hps
	{mso-style-name:hps;}
.MsoPapDefault
	{margin-bottom:10.0pt;
	line-height:115%;}
@page WordSection1
	{size:8.5in 11.0in;
	margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
	{page:WordSection1;}
--&gt;
&lt;/style&gt;

&lt;/head&gt;

&lt;body lang=EN-US link=blue vlink=purple&gt;

&lt;div class=WordSection1&gt;

&lt;p class=MsoNormal&gt;Fortify SCA and the custom rules associated with application
frameworks provide deep coverage of application frameworks.  It may not be
perfect, as no product is, but our research team is probably one of the
strongest that I have worked with and they understand how to vet and analyze
frameworks.  I want to reveal some of our secret sauce when it comes to
analyzing an application framework for vulnerabilities.  I am hoping that by
giving you insight into how a framework is analyzed you will understand how we
support application frameworks.  When analyzing frameworks, there are 3 primary
areas of focus: architectural flows and components, dataflow analysis (sources
of input, pass through methods, and output sinks) and framework specific
vulnerabilities (error prone API methods).&lt;/p&gt;

&lt;h2&gt;Architectural Flows and Components&lt;/h2&gt;

&lt;p class=MsoNormal&gt;When analyzing an application framework, a security
researcher has to understand the architectural components which make up the
framework and the data flows between each component.  This helps with
understanding the big picture.  You’ve got to understand what a framework does
and how it does it if you hope of find weaknesses in it.  For example, if you
are looking at Struts 2, the researcher has to understand the Struts2 filters,
interceptors, Actions, Results, configurations files, and custom tags.  The
following picture sums things up:&lt;/p&gt;

&lt;p class=MsoNormal&gt;&lt;img width=525 height=449 id=&quot;Picture 1&quot;
src=&quot;http://blog.fortify.com/resources/default/s2-arch-big-old.png&quot;&gt;&lt;/p&gt;

&lt;p class=MsoNormal&gt;Copyright Apache Software Foundation.  Picture is from &lt;a
href=&quot;http://struts.apache.org/2.0.6/docs/architecture.data/s2-arch-big-old.png&quot;&gt;http://struts.apache.org/2.0.6/docs/architecture.data/s2-arch-big-old.png&lt;/a&gt;&lt;/p&gt;

&lt;p class=MsoNormal&gt;Understanding the big picture gives you an understanding of
what is going on at a macro level but developing support for an application
framework requires you to dig deeper.  One of the basic rules that you write to
support frameworks are dataflow rules.  These rules define the input sources,
pass through methods, and sinks (where vulnerabilities can be exploited).  &lt;/p&gt;

&lt;h2&gt;Dataflow Analysis&lt;/h2&gt;

&lt;p class=MsoNormal&gt;Any application framework will usually define alternate ways
of retrieving input.  For example Spring MVC utilizes Command classes,
WebRequest, NativeWebRequest, and annotations (on top of the standard JEE
HttpServletRequest and ServletRequest ) to define inputs for web requests.  But
the Spring framework itself also provides input into the application via web
services (Spring WS, XFire, JAX-RPC, etc.), remoted objects (Burlap, Hessian,
Http, RMI, JMX, etc.) and other services.  Identifying these entry points
requires the analysis of configuration files, class hierarchies, and
annotations.  All of which are possible with the Fortify static code analysis (SCA)
engine.  &lt;/p&gt;

&lt;p class=MsoNormal&gt;In the last 2 months I have the opportunity to write some pretty
advanced SCA rules to support frameworks.   I discovered that the SCA engine is
a pretty amazing creation.  There are actually five phases of scanning which
occur where 3 of the phases deal with scripting rules (rules written entirely
in a scripting language having direct access to core SCA data structures,
functions, and entities) and the other two phases dealing with standard rules
(rules which are represented in xml format which pass input to specific SCA
analyzers to produce findings).  Script rules are raw script blocks which hold
the script code used by SCA to carry out a specific task such as parsing
application configuration files and setting up the data structures containing
this information.  Standard rules are analyzer specific but can also execute
script logic to customize the rule definition and inputs based on application
information identified in pre-phase scripts.  Standard rules are primarily
focused on directing one of the many analyzers to find vulnerabilities.   The
SCA engine also supports a process called labeling where mid-phase scripts or
labeling rules (running in phase 2) can tag classes, methods, and fields with
an arbitrary identifier.  Once labeling is complete, standard rules (which run
after mid-phase script rules) can turn labeled items into findings or use
labels to taint entry points or taint labeled methods as sources/sinks for
dataflow analysis.  Standard rules can also directly utilize annotated code
structures to turn annotated methods into findings or taint entry points for
dataflow analysis.  The ability to work with annotations is important for a
static analysis engine because modern frameworks such as Spring MVC (version
2.5 and above) are turning away from rigid class hierarchies and moving toward
annotated POJOs (plain old java objects).  Annotations are used to identify
controller classes and request mapped  methods for  web request entry points. 
The SCA engine is especially well adapted to work with annotations and our rule
set reflects this.  Finally, post-phase scripting rules are run after
vulnerabilities are identified and can be used to clean up/prune identified vulnerabilities
or add additional information to identified vulnerabilities (such as which
configuration file triggered the finding).&lt;/p&gt;

&lt;p class=MsoNormal&gt; Labeling is an important feature of the SCA engine so let
me give you an example:&lt;/p&gt;

&lt;p class=MsoNormal&gt;If a web application utilizes a Hibernate or JPA persisted
entity as its request bound object (commandClass in Spring MVC or Action
attribute in Struts 2) then an attacker could use request parameters to update
information in associate (foreign key related) entities/tables of the
persistent entity.&lt;/p&gt;

&lt;p class=MsoNormal&gt;In order to find this vulnerability a pre-script runs to
collect all of the Hibernate and JPA entities as well as the Spring
commandClasses or Struts 2 Actions within the application.  Then mid-scripts
add a label such as “persistentEntity” or “reqBoundClass” to the classes which
are used as Hibernate/JPA persisted entities or request bound objects. 
Finally, standard rules would find all classes which had labels
“persistentEntity” and “reqBoundClass” to identify objects as request bound
persistent entities.&lt;/p&gt;

&lt;p class=MsoNormal&gt;A security researcher not only needs to understand the
architecture of an application framework and its inputs but he/she also needs to understand
how framework APIs are utilized to pass data through the architecture of the
framework (the “big” picture above).  Most applications that are scanned will
not provide the source code for 3&lt;sup&gt;rd&lt;/sup&gt; party frameworks.  In order to
trace data flows correctly, pass-through rules need to be created which cover
tainted data as it passes through framework code.  This allows the dataflow
analyzer to correctly trace dataflow through components where the source code
was not provided.&lt;/p&gt;

&lt;p class=MsoNormal&gt;Finally, framework specific sinks need to be added to
support the specific application framework.  An example related to hibernate
would be session.createSQLQuery(“SQL string…”);  The Hibernate specific method
“createSQLQuery” could be used to execute a SQL injection attack if a user
controlled string is passed to the method.  &lt;/p&gt;

&lt;h2&gt;Conclusion&lt;/h2&gt;

&lt;p class=MsoNormal&gt;This is probably a lot to take in one setting.  We have
covered two of the three steps required to analyze application frameworks.  You
have also gained insight into some of the inner workings of the SCA engine.  Next
week we will continue our discussion of application frameworks and static
analysis by looking at framework specific vulnerabilities.&lt;/p&gt;

&lt;/div&gt;

&lt;/body&gt;

&lt;/html&gt;
</description>
            <guid>http://blog.fortify.com/blog/2011/12/02/Application-Frameworks-and-Static-Analysis-Part-Ein</guid>
			<pubDate>Fri, 2 Dec 2011 15:04:44 -0800</pubDate>
            <category>/Fortify/</category>
                                        <wfw:comment>http://blog.fortify.com/commentapi/default/Fortify/2011/12/02/Application-Frameworks-and-Static-Analysis-Part-Ein</wfw:comment>
            <wfw:commentRss>http://blog.fortify.com/blog/2011/12/02/Application-Frameworks-and-Static-Analysis-Part-Ein?page=comments&amp;flavor=rss2</wfw:commentRss>
                                </item>
                        <item>
            <title>Q4 2011 Rulepack Update</title>
            <link>http://blog.fortify.com/blog/2011/11/23/Q4-2011-Rulepack-Update</link>
            <description>&lt;p&gt;We have just released the Q4 2011 update to the HP Fortify Secure Coding Rulepacks and the HP Fortify RTA Rulepack Kit.&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;With this release the HP Fortify Secure Coding Rulepacks now detect 502 unique categories of vulnerabilities across 20 programming languages and over 700,000 individual APIs. I would like to share with you a quick summary of the latest offerings from this release.&lt;/p&gt; 
&lt;br&gt;
&lt;p&gt;&lt;strong&gt;&lt;u&gt;HP Fortify Secure Coding Rulepacks&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Spring 3.0&lt;/strong&gt;  – Support for the latest version of the Spring framework, including the following major features:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;   &amp;#160;&amp;#160;&amp;#160;Spring MVC&lt;/strong&gt; – Updated support includes enhanced coverage of specific vulnerabilities related to the Spring &amp;#160;&amp;#160;&amp;#160;Framework and Spring Annotations. The update also allows Fortify to identify web service taint from REST &amp;#160;&amp;#160;&amp;#160;templates, locate resource injection errors in Spring applications, and detect three new vulnerability categories:&lt;/p&gt;
&lt;p&gt;     &amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;- Often Misused: Spring Remote Service&lt;/p&gt;
&lt;p&gt;	&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;- Often Misused: Spring Web Service and&lt;/p&gt;
&lt;p&gt;	&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;- Spring MVC Bad Practices: Request Parameters Bound into Persisted Objects  &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;   &amp;#160;&amp;#160;&amp;#160;Spring Web Flow&lt;/strong&gt; – New support for the Spring Web Flow framework includes identifying sources of web taint &amp;#160;&amp;#160;&amp;#160;from the framework and reporting vulnerabilities specific to Spring Web Flow applications.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Google Android &lt;/strong&gt;– Updated support now provides improved detection of underprivileged Android applications, including missing permissions for privileged API calls, as well as sending and receiving intents. In addition, Fortify now detects overprivileged Android applications that request unnecessary permissions. This update introduces three new categories related to privilege management:&lt;/p&gt; 
&lt;p&gt;	&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;- Privilege Management: Missing API Permission&lt;/p&gt;
&lt;p&gt;	&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;- Privilege Management: Missing Intent Permission and &lt;/p&gt;
&lt;p&gt;	&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;- Privilege Management: Unnecessary Permission.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;File Disclosure&lt;/strong&gt; – Misconfiguration and poor input validation in modern web frameworks can accidentally disclose sensitive files, including configuration and application code. Fortify now identifies File Disclosure vulnerabilities in applications that rely on Core EE Java APIs, Apache Struts, Spring and Spring Web Flow.&lt;/p&gt;
&lt;br&gt;
&lt;p&gt;&lt;strong&gt;&lt;u&gt;HP Fortify RTA Rulepack Kit&lt;/u&gt;&lt;/strong&gt; – This quarter’s update adds three new categories for Fortify RTA:&lt;/p&gt;
&lt;p&gt;     &lt;strong&gt;Insecure Randomness&lt;/strong&gt; – Added the ability to detect and replace uses of insecure random number generators with cryptographically-strong alternatives. &lt;/p&gt;
&lt;p&gt;     &lt;strong&gt;JavaScript Hijacking&lt;/strong&gt; – We now detect JavaScript Hijacking and provide protection against Ajax/JSON/JSONP Hijacking in applications that rely on JavaScript for data transport.&lt;/p&gt; 
&lt;p&gt;     &lt;strong&gt;Cookie Security: HTTPOnly not Set on Session Cookie&lt;/strong&gt; – Added support for detecting and remediating insecure settings of the HTTPOnly flag during cookie creation. &lt;/p&gt;

</description>
            <guid>http://blog.fortify.com/blog/2011/11/23/Q4-2011-Rulepack-Update</guid>
			<pubDate>Wed, 23 Nov 2011 13:15:58 -0800</pubDate>
            <category>/Fortify/</category>
                                        <wfw:comment>http://blog.fortify.com/commentapi/default/Fortify/2011/11/23/Q4-2011-Rulepack-Update</wfw:comment>
            <wfw:commentRss>http://blog.fortify.com/blog/2011/11/23/Q4-2011-Rulepack-Update?page=comments&amp;flavor=rss2</wfw:commentRss>
                                </item>
                        <item>
            <title>From an Undisclosed Location in Washington State</title>
            <link>http://blog.fortify.com/blog/2011/11/15/From-an-Undisclosed-Location-in-Washington-State</link>
            <description>&lt;a href=&quot;http://tinypic.com?ref=jzv7d0&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://i41.tinypic.com/jzv7d0.jpg&quot; border=&quot;0&quot; alt=&quot;Image and video hosting by TinyPic&quot;&gt;&lt;/a&gt;
&lt;p&gt;This week I’m attending a conference for the participants of the BSIMM project, which seeks to objectively measure the software security assurance activities conducted by leading ISVs, financial services firms, and a variety of other development organizations. 
&lt;/p&gt;
&lt;p&gt;
At the conference, Gary McGraw, Sammy Migues, and Brian Chess (who created BSIMM) are sharing the results of the third round of measurements spanning 42 different firms with representatives of those firms.  Most of the results make sense and fit with a motherhood-and-apple-pie understanding of the industry and what counts. However, as the number of participants increases and the set of measured data points grows, so to does the risk of misconstruing the results to promote pet arguments or other fallacies. 
&lt;/p&gt;
&lt;p&gt;
Now things are getting fun. As I write this, the group is preparing to spend the bulk of the afternoon discussing how measurement efforts like BSIMM could be used to assess and compare vendors in terms of software security maturity. Do the activities measured in BSIMM provide a meaningful differentiator? Do strong maturity levels correlate to better security? Do third-party vendors behave the same way as internal efforts? 
&lt;/p&gt;
&lt;p&gt;
I will enjoy debating these topics, but more importantly, I’m excited that the debate is occurring. The more energy we spend discussing these topics, the more likely we are to collect and share data that will help us reach better answers.
&lt;/p&gt;
</description>
            <guid>http://blog.fortify.com/blog/2011/11/15/From-an-Undisclosed-Location-in-Washington-State</guid>
			<pubDate>Tue, 15 Nov 2011 14:25:57 -0800</pubDate>
            <category>/Fortify/</category>
                                        <wfw:comment>http://blog.fortify.com/commentapi/default/Fortify/2011/11/15/From-an-Undisclosed-Location-in-Washington-State</wfw:comment>
            <wfw:commentRss>http://blog.fortify.com/blog/2011/11/15/From-an-Undisclosed-Location-in-Washington-State?page=comments&amp;flavor=rss2</wfw:commentRss>
                                </item>
                        <item>
            <title>No correlation is interesting too. Part 2: SCA customization: Custom Source rules</title>
            <link>http://blog.fortify.com/blog/2011/11/11/No-correlation-is-good-too-Part-2-SCA-customization-Custom-Source-rules</link>
            <description>&lt;a href=&quot;http://blog.fortify.com/blog/2011/10/07/No-correlation-is-interesting-too-Part-1-WI-is-not-configured-right&quot;&gt;As discussed in part 1 of this blog post&lt;/a&gt; WI misconfiguration can lead to no correlation. Now, we show how SCA misconfiguration can also lead to no correlation.
&lt;br/&gt;&lt;br/&gt;
For a particular application, WI was showing issues in the category &quot;Privacy Violation: Credit Card Number Disclosed&quot; and &quot;Privacy Violation: Social Security Number Disclosure&quot;. While the SSN issues correlated nicely with SCA issues, the CCN issues did not. In fact, SCA wasn&#39;t finding a single issue in the CCN Disclosed category in the first place, so no wonder there was no correlation.
&lt;br/&gt;&lt;br/&gt;
The underlying problem was fairly obvious too. By default the HP Fortify SCA rules keep track of CCN and SSN when they are stored in variables which 
are unambiguous. For example, the SSN in this application was stored in a field called &quot;ssn&quot; which was tracked by default. However, the CCN was stored in a
field &quot;ccNum&quot; which is not one of the field or variable names which we track by default. To resolve this, a characterization rule can be written to keep track of these custom field and variable names. An example of such rule is:
&lt;br/&gt;
&lt;pre&gt;
            &amp;lt;CharacterizationRule formatVersion=&quot;3.7&quot; language=&quot;dotnet&quot;&amp;gt;
                &amp;lt;RuleID&amp;gt;SAMPLE_RULE_ADDING_PRIVATE_FLAG_001&amp;lt;/RuleID&amp;gt;
                &amp;lt;StructuralMatch&amp;gt;&amp;lt;![CDATA[
                    FieldAccess fa: fa.field.name matches &quot;ccNum&quot; and
                    not fa in [AssignmentStatement: lhs.location is [Location l: l.transitiveBase === fa.transitiveBase]]
                    ]]&amp;gt;&amp;lt;/StructuralMatch&amp;gt;
                &amp;lt;Definition&amp;gt;&amp;lt;![CDATA[
                    TaintSource(fa, {+PRIVATE})
                    ]]&amp;gt;&amp;lt;/Definition&amp;gt;
            &amp;lt;/CharacterizationRule&amp;gt;
&lt;/pre&gt;

When the field in the class is retrieved through a getter, a even more trivial rule can be written (more trivial, because click through the wizards and the rule will be written for you):
&lt;pre&gt;
            &amp;lt;DataflowSourceRule formatVersion=&quot;3.2&quot; language=&quot;dotnet&quot;&amp;gt;
                &amp;lt;RuleID&amp;gt;SAMPLE_RULE_ADDING_PRIVATE_FLAG_002&amp;lt;/RuleID&amp;gt;
                &amp;lt;TaintFlags&amp;gt;+PRIVATE&amp;lt;/TaintFlags&amp;gt;
                &amp;lt;FunctionIdentifier&amp;gt;
                    &amp;lt;NamespaceName&amp;gt;
                        &amp;lt;Value&amp;gt;App.Name.Space&amp;lt;/Value&amp;gt;
                    &amp;lt;/NamespaceName&amp;gt;
                    &amp;lt;ClassName&amp;gt;
                        &amp;lt;Value&amp;gt;CCProcessing&amp;lt;/Value&amp;gt;
                    &amp;lt;/ClassName&amp;gt;
                    &amp;lt;FunctionName&amp;gt;
                        &amp;lt;Pattern&amp;gt;GetSavedCC&amp;lt;/Pattern&amp;gt;
                    &amp;lt;/FunctionName&amp;gt;
                    &amp;lt;ApplyTo implements=&quot;true&quot; overrides=&quot;true&quot; extends=&quot;true&quot;/&amp;gt;
                &amp;lt;/FunctionIdentifier&amp;gt;
                &amp;lt;OutArguments&amp;gt;return&amp;lt;/OutArguments&amp;gt;
            &amp;lt;/DataflowSourceRule&amp;gt;
&lt;/pre&gt;
By inserting the rule, SCA was able to find the issues shown by WI. More importantly, SCA was able to find issues which weren&#39;t found by WI. Turned out that WI only scanned a portion of the application.
&lt;br/&gt;&lt;br&gt;
In short, it is important to exactly model your application in a static analysis tool to find the best results (reduce false positives and find all true issues). As it is not always obvious where a static analysis tool is missing true issues, a pen testing tool can help pointing out shortcomings in the result set. These shortcomings can then be modeled through custom rules. To write custom rules, the tools and documentation which SRG uses on day-to-day basis is available 
for our customers too. 
</description>
            <guid>http://blog.fortify.com/blog/2011/11/11/No-correlation-is-good-too-Part-2-SCA-customization-Custom-Source-rules</guid>
			<pubDate>Fri, 11 Nov 2011 03:56:21 -0800</pubDate>
            <category>/Fortify/</category>
                                        <wfw:comment>http://blog.fortify.com/commentapi/default/Fortify/2011/11/11/No-correlation-is-good-too-Part-2-SCA-customization-Custom-Source-rules</wfw:comment>
            <wfw:commentRss>http://blog.fortify.com/blog/2011/11/11/No-correlation-is-good-too-Part-2-SCA-customization-Custom-Source-rules?page=comments&amp;flavor=rss2</wfw:commentRss>
                                </item>
                        <item>
            <title>Common Pitfalls in Custom Rules -- constantValue and null</title>
            <link>http://blog.fortify.com/blog/2011/11/04/Common-Pitfalls-in-Custom-Rules-constantValue-and-null</link>
            <description>&lt;p&gt;
To get the most out of a static analysis scan, one of the important features is the ability to write custom rules. The Custom Rules Editor, available as a part of HP Fortify Audit Workbench, contains wizards that generate templates rules for many common rule types. These templates provide a great starting point for writing more complex custom rules to suit your organization&#39;s needs.
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;http://blog.fortify.com/blog/Fortify/2011/07/28/Power-of-Customization&quot;&gt;One of our last updates&lt;/a&gt; to the wizard contains a customizable structural rules for hardcoded, empty, and null passwords. These rules demonstrate one of the fine points of the structural language and the &lt;tt&gt;constantValue&lt;/tt&gt; field. Understanding how the &lt;tt&gt;constantValue&lt;/tt&gt; field works will greatly help you write your own custom structural rules from scratch.
&lt;/p&gt;

&lt;p&gt;
Here is the generated rule for hardcoded passwords:
&lt;/p&gt;

&lt;pre&gt;
   FieldAccess fa: fa.field.name matches &quot;password&quot; and
       fa in [AssignmentStatement: lhs.location is fa and
               not rhs.constantValue.null and
               not rhs.constantValue is [Null: ] and
               not rhs.constantValue == &quot;&quot;] and
       fa.field is [Field f:]*
&lt;/pre&gt;

&lt;p&gt;
One of the most common points of confusion is the difference between &lt;tt&gt;not rhs.constantValue.null&lt;/tt&gt;, &lt;tt&gt;not rhs.constantValue is  [Null: ]&lt;/tt&gt;, and &lt;tt&gt;not rhs.constantValue == &quot;&quot;&lt;/tt&gt;. Looking at the structural type reference, it tells us that &lt;tt&gt;AssignmentStatement.rhs&lt;/tt&gt; is an &lt;tt&gt;Expression&lt;/tt&gt;, which in turn contains the following structural property:
&lt;/p&gt;

&lt;table&gt;
&lt;tr&gt;
   &lt;th&gt;Name&lt;/th&gt;
   &lt;th&gt;Type&lt;/th&gt;
   &lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;tr&gt;
   &lt;td&gt;constantValue&lt;/td&gt;
   &lt;td&gt;Value&lt;/td&gt;
   &lt;td&gt;The constant value of this expression. Will be null if this expression doesn&#39;t have a constant value or if SCA is unable to determine it.&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;

&lt;p&gt;
With this definition in mind, let&#39;s look at each of them in turn and discuss what each of the clauses mean.
&lt;/p&gt;

&lt;ol&gt;
   &lt;li&gt; First, let&#39;s look at &lt;tt&gt;constantValue.null&lt;/tt&gt;. From the structural type definition above, we see that the &lt;tt&gt;constantValue&lt;/tt&gt; field is &lt;tt&gt;null&lt;/tt&gt; if the expression does &lt;i&gt;not&lt;/i&gt; have a constant value. In other words, &lt;tt&gt;not rhs.constantValue.null&lt;/tt&gt; matches an expression whose value &lt;b&gt;is a constant&lt;/b&gt;.&lt;/li&gt;
   &lt;li&gt;&lt;tt&gt;constantValue is [Null: ]&lt;/tt&gt;. Again, according to the structural type reference, &lt;tt&gt;constantValue&lt;/tt&gt; is of type &lt;tt&gt;Value&lt;/tt&gt;, of which &lt;tt&gt;Null&lt;/tt&gt; is a subtype. &lt;tt&gt;Null&lt;/tt&gt; simply refers to &quot;A null program value.&quot; Thus, &lt;b&gt;&lt;tt&gt;not rhs.constantValue is [Null: ]&lt;/tt&gt;&lt;/b&gt; simply means that the right-hand side &lt;b&gt;is a non-null constant value&lt;/b&gt;.&lt;/li&gt;
   &lt;li&gt;&lt;tt&gt;constantValue == &quot;&quot;&lt;/tt&gt;. It signifies that the value is a non-null empty string. Therefore, &lt;b&gt;&lt;tt&gt;not rhs.constantValue == &quot;&quot;&lt;/tt&gt;&lt;/b&gt; refers to an expression that &lt;b&gt;is a non-empty constant string&lt;/b&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;
To summarize:
&lt;/p&gt;

&lt;table style=&quot;border: none; width: 80%&quot;&gt;
&lt;tr&gt;
   &lt;td&gt;&lt;tt&gt;not rhs.constantValue.null&lt;/tt&gt;&lt;/td&gt;
   &lt;td&gt;means&lt;/td&gt;
   &lt;td&gt;right hand side is a constant value,&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
   &lt;td&gt;&lt;tt&gt;not rhs.constantValue is [Null: ]&lt;/tt&gt;&lt;/td&gt;
   &lt;td&gt;means&lt;/td&gt;
   &lt;td&gt;right-hand side is non-null,&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
   &lt;td&gt;&lt;tt&gt;not rhs.constantValue == &quot;&quot;]&lt;/tt&gt;&lt;/td&gt;
   &lt;td&gt;means&lt;/td&gt;
   &lt;td&gt;right-hand side is a non-empty string.&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
</description>
            <guid>http://blog.fortify.com/blog/2011/11/04/Common-Pitfalls-in-Custom-Rules-constantValue-and-null</guid>
			<pubDate>Fri, 4 Nov 2011 08:00:00 -0700</pubDate>
            <category>/Fortify/</category>
                                        <wfw:comment>http://blog.fortify.com/commentapi/default/Fortify/2011/11/04/Common-Pitfalls-in-Custom-Rules-constantValue-and-null</wfw:comment>
            <wfw:commentRss>http://blog.fortify.com/blog/2011/11/04/Common-Pitfalls-in-Custom-Rules-constantValue-and-null?page=comments&amp;flavor=rss2</wfw:commentRss>
                                </item>
                        <item>
            <title>Brakeman</title>
            <link>http://blog.fortify.com/blog/2011/10/21/Brakeman</link>
            <description>&lt;p&gt;One of my favorite talks from &lt;a href=&quot;http://www.appsecusa.org&quot;&gt;OWASP AppSec USA 2011&lt;/a&gt; was &lt;a href=&quot;http://www.appsecusa.org/talks.html#brakemanandjenkins&quot;&gt;Brakeman and Jenkins: The Duo Detect Defects in Ruby on Rails Code&lt;/a&gt;.  Justin Collins and Tin Zaw have written a static analysis system for Ruby on Rails.  (Here&#39;s a link directly to &lt;a href=&quot;http://brakemanscanner.org/&quot;&gt;Brakeman&lt;/a&gt;.)
&lt;/p&gt;
&lt;p&gt;
What I particularly like about their work is that they didn&#39;t focus exclusively on analysis algorithms.  They saved some of their energy and creativity for creating a solid build integration framework and an audit interface.  The typical mistake for a first-time static analysis builder is to become fascinated with syntax trees and fixed point calculation.  Justin and Tin have (wisely) chosen to make an end-to-end working system instead.  Good stuff!
&lt;/p&gt;
</description>
            <guid>http://blog.fortify.com/blog/2011/10/21/Brakeman</guid>
			<pubDate>Fri, 21 Oct 2011 09:30:37 -0700</pubDate>
            <category>/Fortify/</category>
                                        <wfw:comment>http://blog.fortify.com/commentapi/default/Fortify/2011/10/21/Brakeman</wfw:comment>
            <wfw:commentRss>http://blog.fortify.com/blog/2011/10/21/Brakeman?page=comments&amp;flavor=rss2</wfw:commentRss>
                                </item>
                        <item>
            <title>Reflections on Mobile Trends</title>
            <link>http://blog.fortify.com/blog/2011/10/11/Reflections-on-Mobile-Trends</link>
            <description>&lt;p&gt;I posted a lot on Google Android in the last year, and even though Android is getting more and more popular, it is not the only mobile platform out there. Naturally, another big one is Apple’s iOS, and I am looking at it right now. But, before I dive into the intricacies of iOS, I wanted to take a look at some of the other players in the mobile market.&lt;/p&gt;

&lt;p&gt;Windows Mobile is basically dead, so for Microsoft’s platform I focused on Windows Phone. WP7 uses Silverlight and XNA, which is a framework for writing games. However, Microsoft’s story is confusing: Windows 8, which will be released at the beginning of 2012 for desktops and tablets, is based on JavaScript and HTML5, but it is unclear what the next Windows Phone will be based on. Is Microsoft moving away from Silverlight and .NET? Or Windows Phone and tablets will be using different technologies?&lt;/p&gt;

&lt;p&gt;I also looked at Blackberry (RIM) and learned that in addition to being able to write mobile applications in Java (which is what everyone seems to know about), you can also use Flash and ActionScript for tablet development, as well as JavaScript and HTML5 for web development.&lt;/p&gt;

&lt;p&gt;Do these data points suggest that the mobile world is moving in the direction of HTML5 and JavaScript rather than native applications? Looks like it. Does this mean that Google Android and Apple iOS will too? Probably not. One of the biggest selling points of both platforms is their inventory of applications. Drastically changing the underlying technology, towards web standards and away from native applications, could threaten the stability and breadth of functionality offered by Apple’s and Google’s app stores. Only time will tell.&lt;/p&gt;
</description>
            <guid>http://blog.fortify.com/blog/2011/10/11/Reflections-on-Mobile-Trends</guid>
			<pubDate>Tue, 11 Oct 2011 14:58:53 -0700</pubDate>
            <category>/Fortify/</category>
                                        <wfw:comment>http://blog.fortify.com/commentapi/default/Fortify/2011/10/11/Reflections-on-Mobile-Trends</wfw:comment>
            <wfw:commentRss>http://blog.fortify.com/blog/2011/10/11/Reflections-on-Mobile-Trends?page=comments&amp;flavor=rss2</wfw:commentRss>
                                </item>
                        <item>
            <title>No correlation is interesting too. Part 1: WI is not configured right</title>
            <link>http://blog.fortify.com/blog/2011/10/07/No-correlation-is-interesting-too-Part-1-WI-is-not-configured-right</link>
            <description>With the introduction of &lt;a href=http://blog.fortify.com/blog/Fortify/2011/06/27/Adding-X-Ray-technology-to-black-box-analysis-tools-Part-1&gt;Web Inspect Real Time&lt;/a&gt;, we improved our correlation mechanism for the third time. Obviously, everybody wants to see correlation when running the suite on their application. However, no correlation may be a good indicator that not everything is set up right...
&lt;br&gt;&lt;br&gt;
No correlation means something is off. In a perfect world, each issue found by product A has to have 1 or more correlated issue found by product B. If the issue is only found by product A, then 
&lt;ul&gt; the issue found by product A is a FP or&lt;/ul&gt;
&lt;ul&gt; product B is not configured right&lt;/ul&gt;
One user case that I saw a couple of times now, was SCA pointing out multiple &quot;&lt;a href=http://blog.fortify.com/blog/2011/02/08/Double-Trouble&gt;Parse Double Precision&lt;/a&gt;&quot; issues in the code while WebInspect(WI) (and consequently SecurityScope) fails to report such issues. The reason why WI was not finding these issues was simply WI misconfiguration. As the Double Precision problem leads to a DoS, the check for it is not part of the default policy. Only when the &quot;Assault Policy&quot; or the &quot;All Check Policy&quot; is chosen in WI, the Denial of Service attacks are sent out. You can also manually add the Parse Double attack to the policy by choosing: 
Policy manager: Logical Attacks -&gt; Denial of Service: (end of the list) Java (or PHP) Double-Precision Parsing Denial of Service. (On a side note, please hit SmartUpdate as we&#39;ve added more attack patterns to the WI check Java/PHP Double-precision Parsing Denial of Service)
&lt;br/&gt;&lt;br/&gt;
UPDATE Oct 24:&lt;br&gt;
When making this policy manually, it&#39;s important to switch on the necessary Audit Engines. This can be done by going to the Policy Manager and clicking on &quot;Threat Classes&quot; and go to &quot;Attack Groups&quot;. Choose: Audit Engines -&gt; Adaptive Agents
</description>
            <guid>http://blog.fortify.com/blog/2011/10/07/No-correlation-is-interesting-too-Part-1-WI-is-not-configured-right</guid>
			<pubDate>Fri, 7 Oct 2011 03:34:25 -0700</pubDate>
            <category>/Fortify/</category>
                                        <wfw:comment>http://blog.fortify.com/commentapi/default/Fortify/2011/10/07/No-correlation-is-interesting-too-Part-1-WI-is-not-configured-right</wfw:comment>
            <wfw:commentRss>http://blog.fortify.com/blog/2011/10/07/No-correlation-is-interesting-too-Part-1-WI-is-not-configured-right?page=comments&amp;flavor=rss2</wfw:commentRss>
                                </item>
                        <item>
            <title>BSIMM 3</title>
            <link>http://blog.fortify.com/blog/2011/09/27/BSIMM-3</link>
            <description>We published BSIMM3 today.  The &lt;a href=&quot;http://www.bsimm.com&quot;&gt;full model is here&lt;/a&gt;, and there&#39;s a &lt;a href=&quot;http://www.informit.com/articles/article.aspx?p=1755416&quot;&gt;summary article here&lt;/a&gt;.
&lt;p&gt;
We&#39;ve now got 42 measurements (and more in the pipeline.)  This is the first year of BSIMM where we&#39;ve re-measured some of the early participants.  To put it in fancy terms, we&#39;re now a longitudinal survey.  It&#39;s cool to see some quantifiable evidence of progress within some of these software security initiatives.  We worked hard to add at least one more example to each of the 109 activities.  I&#39;m happy about how it came out.
&lt;p&gt;
If you&#39;re new to the BSIMM, here&#39;s just a little bit of background:
&lt;br&gt;
The Building Security In Maturity Model (BSIMM, pronounced &quot;bee simm&quot;) is an observation-based scientific model directly describing the collective software security activities of forty-two software security initiatives.   Participants include Adobe, Intuit, Bank of America, Microsoft, EMC, SAP, Google, Visa, Wells Fargo, and VMWare.  We measure an organization by conducting an in-person interview with the executive in charge of the software security initiative. We convert what we learn during the interview into a BSIMM scorecard by identifying which of the 109 BSIMM activities the organization carries out. (Nobody does all 109.)
&lt;p&gt;
As always, the BSIMM comes with a Creative Commons license that allows you to use it for your own purposes so long as you include a pointer back to the BSIMM.
</description>
            <guid>http://blog.fortify.com/blog/2011/09/27/BSIMM-3</guid>
			<pubDate>Tue, 27 Sep 2011 20:57:22 -0700</pubDate>
            <category>/Fortify/</category>
                                        <wfw:comment>http://blog.fortify.com/commentapi/default/Fortify/2011/09/27/BSIMM-3</wfw:comment>
            <wfw:commentRss>http://blog.fortify.com/blog/2011/09/27/BSIMM-3?page=comments&amp;flavor=rss2</wfw:commentRss>
                                </item>
                        <item>
            <title>FoD 3.0!</title>
            <link>http://blog.fortify.com/blog/2011/09/20/FoD-3-0</link>
            <description>&lt;p&gt;The new release of Fortify On Demand (FoD) is just about ready to be released and it has a big new set of exciting features. If you are unfamiliar with FoD it&#39;s worth getting to know what it&#39;s about. FoD is our cloud based security solution. It&#39;s designed for customers who want to scan their products once in a while. There is nothing to install, you just upload your source code or binaries to our server and we do all of the auditing for you, usually in about a day. We can also do dynamic scans if you give us the URL of the site you want us to test. Another use for FoD is as a gatekeeper for companies who want a third party to verify the security of libraries or applications they are going to use.&lt;/p&gt;
 
&lt;p&gt;The new version of FoD has three key new features. The first is the dashboard. This new landing page for the product presents you with a four panel overview of how your projects are trending from a security standpoint, what the most prevalent types of issues are, how your entire portfolio of projects rates in terms of security and more. Not only does it provide a lot of great information. It also looks great as you can see below.&lt;/p&gt;
 
&lt;p&gt;&lt;img src=&quot;http://blog.fortify.com/resources/default/fod_blog_exec_dashboard.png&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Sweet! Right? The most important aspect of the dashboard is that it provides a complete overview, a heat map if you will, about the projects you have going and where they stand from the security standpoint. This will be invaluable to security leads and managers who want a larger view on their security stance.&lt;/p&gt;
 
&lt;p&gt;Next up is the collaboration module. This is a straight port of some code from Fortify 360 that gives you a detailed look into each of the vulnerabilities we found in the code and allows you to identify if these are issues or not. You can see a screenshot of that UI below.&lt;/p&gt;
 
&lt;p&gt;&lt;img src=&quot;http://blog.fortify.com/resources/default/fod_blog_collab.png&quot; /&gt;&lt;/p&gt;
 
&lt;p&gt;If you are familiar with F360 or AWB then this should be really familiar to you.&lt;/p&gt;
 
&lt;p&gt;The third important new feature is trending. Trending means that you can track how you project is improving (hopefully) security wise. The metrics from each audit are captured and you can see how these progress over time as shown in the example screenshot below.&lt;/p&gt;
 
&lt;p&gt;&lt;img src=&quot;http://blog.fortify.com/resources/default/fod_blog_trend.png&quot; /&gt;&lt;/p&gt;
 
&lt;p&gt;These may seem like rudimentary features if you are familiar with our entire product suite, but to see this in the On Demand product is really exciting for us. Our customers have been asking for this for a while and it&#39;s great to be able to get these new features into their hands.&lt;/p&gt;
</description>
            <guid>http://blog.fortify.com/blog/2011/09/20/FoD-3-0</guid>
			<pubDate>Tue, 20 Sep 2011 09:12:48 -0700</pubDate>
            <category>/Fortify/</category>
                                        <wfw:comment>http://blog.fortify.com/commentapi/default/Fortify/2011/09/20/FoD-3-0</wfw:comment>
            <wfw:commentRss>http://blog.fortify.com/blog/2011/09/20/FoD-3-0?page=comments&amp;flavor=rss2</wfw:commentRss>
                                </item>
                        <item>
            <title>Comodo Hacker Takes Us Back to Security 101</title>
            <link>http://blog.fortify.com/blog/2011/09/12/Comodo-Hacker-Takes-Us-Back-to-Security-101</link>
            <description>&lt;p&gt;
A presumably lone-but-patriotic hacker, known only as the Comodo Hacker, has been &lt;a href=&quot;http://www.bbc.co.uk/news/technology-14789763&quot;&gt;making the rounds in the news&lt;/a&gt; recently for compromising several of the most widely-used certificate authorities (CAs). The attacker forged certificates of several well-trafficked sites including Gmail, Microsoft, and Skype, which allowed intermediate proxies to spoof as the target website. As a result, email communications of some &lt;a href=&quot;http://www.nytimes.com/2011/09/12/technology/hacker-rattles-internet-security-circles.html&quot;&gt;300,000 Iranian users&lt;/a&gt; may have been monitored.
&lt;/p&gt;

&lt;p&gt;
While the incident has sparked much political debate as well as an interest in the identity of the hacker, it reminds us of one of the basic security tenets: a chain is only as strong as the weakest link.
&lt;/p&gt;

&lt;p&gt;
For instance, Google is known not only for its technical merits, but for its track record of protecting user privacy in spite of pressures from Big Brother-type governments. This self-proclaimed &quot;do no evil&quot; philosophy has attracted many users in politically sensitive regions to trust Gmail to keep their emails secure. In fact, over the course of this incident, Google was proactive on protecting the security of its users, carrying out its due diligence with &lt;a href=&quot;http://googleonlinesecurity.blogspot.com/2011/08/update-on-attempted-man-in-middle.html&quot;&gt;constant updates&lt;/a&gt; in its blog and &lt;a href=&quot;http://googleonlinesecurity.blogspot.com/2011/09/gmail-account-security-in-iran.html&quot;&gt;urging Iranian users&lt;/a&gt; to double-check their account settings. In this case, however, personal email messages were able to be compromised because Google, as a web company, is unavoidably reliant on web browsers to handle digital certificates. The victim of Comodo Hacker&#39;s attacks was one of the many other CAs trusted by popular browsers&amp;mdash;one that wasn&#39;t even used by Google in the first place!*
&lt;/p&gt;

&lt;p&gt;
Of course, building on top of the work of others is not only a fact of life, but is what drives technology forward at such a rapid pace. The series of intrusions are a grim reminder that we must be mindful when trusting third-party libraries and components. It is important, but not enough, to secure just your own applications, but also take into account possible vulnerabilities in any components that you use.
&lt;/p&gt;

&lt;p&gt;
&lt;em&gt;
* Edit: The original text stated that the compromised CA was the one used by Google. This was not the case, as the attack was on a different (but browser-trusted) CA. Thanks to Desperate Olive for pointing out the error!
&lt;/em&gt;
&lt;/p&gt;
</description>
            <guid>http://blog.fortify.com/blog/2011/09/12/Comodo-Hacker-Takes-Us-Back-to-Security-101</guid>
			<pubDate>Mon, 12 Sep 2011 16:42:25 -0700</pubDate>
            <category>/Fortify/</category>
                                        <wfw:comment>http://blog.fortify.com/commentapi/default/Fortify/2011/09/12/Comodo-Hacker-Takes-Us-Back-to-Security-101</wfw:comment>
            <wfw:commentRss>http://blog.fortify.com/blog/2011/09/12/Comodo-Hacker-Takes-Us-Back-to-Security-101?page=comments&amp;flavor=rss2</wfw:commentRss>
                                </item>
                        <item>
            <title>Fortify Insider Threat Rulepack now supports .NET</title>
            <link>http://blog.fortify.com/blog/2011/09/01/Q3-Update-to-the-Fortify-Insider-Threat-Secure-Coding-Rulepack</link>
            <description>&lt;p&gt;The Fortify Insider Threat Rulepack is for detecting malicious codes intentionally introduced by malicious insiders. This malicious code can be in the form of common application vulnerabilities, such as a buffer overflow or a SQL injection. These vulnerabilities will be detected by standard Fortify rulepacks. Another form of intentionally introduced malicious codes are not standard “vulnerabilities”, they look like regular program logic but with hidden, malicious “intentions”. With our new version of the Fortify Insider Threat rulepack we can detect the following classes of malicious intentions:&lt;/p&gt;

&lt;ul&gt; 
&lt;li&gt;Logic or Time Bomb (e.g. comparing date/time)&lt;/li&gt;
&lt;li&gt;Backdoors and Secret Credentials (e.g. comparing user name with a hardcoded value)&lt;/li&gt;
&lt;li&gt;Nefarious Communication (e.g. network port listening)&lt;/li&gt;
&lt;li&gt;Dynamic Code Injection/Manipulation (e.g. executing external command)&lt;/li&gt;
&lt;li&gt;Obfuscation and Camouflage (e.g. decrypting a constant string)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Fortify released the Insider Threat rulepack for Java back in 2008, the latest version of Insider Threat rulepack is just released as part of the quarterly rulepack update with the following enhancements:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Support for Microsoft.NET APIs:&lt;/b&gt; Now with 13 common categories that exist in both Java and .NET,  9 Java only vulnerabilities and 9 .NET only vulnerabilities&lt;/li&gt;
&lt;li&gt;&lt;b&gt;CWE Support&lt;/b&gt;: each Insider Threat category is now mapped with a CWE reference number&lt;/li&gt;
&lt;li&gt;Improved descriptions and examples to help developers to understand the underlying risks&lt;/li&gt;
&lt;li&gt;Redesigned project template to adapt to the new Fortify Priority Order&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Detecting insider traps is not as straight forward as detecting standard application vulnerabilities. We are constantly looking into different approaches to improve the Insider Threat Rulepack. Please don’t hesitate to contact us if you have any comments/queries/questions.&lt;/p&gt;
</description>
            <guid>http://blog.fortify.com/blog/2011/09/01/Q3-Update-to-the-Fortify-Insider-Threat-Secure-Coding-Rulepack</guid>
			<pubDate>Thu, 1 Sep 2011 07:00:00 -0700</pubDate>
            <category>/Fortify/</category>
                                        <wfw:comment>http://blog.fortify.com/commentapi/default/Fortify/2011/09/01/Q3-Update-to-the-Fortify-Insider-Threat-Secure-Coding-Rulepack</wfw:comment>
            <wfw:commentRss>http://blog.fortify.com/blog/2011/09/01/Q3-Update-to-the-Fortify-Insider-Threat-Secure-Coding-Rulepack?page=comments&amp;flavor=rss2</wfw:commentRss>
                                </item>
                        <item>
            <title>Android Permissions in Motion</title>
            <link>http://blog.fortify.com/blog/2011/08/26/5C79663B8B1A947DC39975CF6068B909</link>
            <description>&lt;p&gt;Ho Chen and Lian Cai, of University of Califonia Davis, just published a &lt;a href=&quot;http://www.cs.ucdavis.edu/~hchen/paper/hotsec11.pdf&quot;&gt;paper&lt;/a&gt; showing they could determine the keystrokes on a touchscreen phone just using the accelerometer. Their over 70% accuracy on a 10-digit keypad makes it clear this is a completely feasible attack that most mobile phone users would never think to worry about.&lt;/p&gt;

&lt;p&gt;When we took a look at Android security earlier this year, we quickly focused on the permissions model as being one of the most interesting areas of research. We &lt;a href=&quot;http://blog.fortify.com/blog/2011/08/19/Seven-Ways-to-Hang-Yourself-with-Google-Android&quot;&gt;presented at DefCon&lt;/a&gt; with some friends from University of California Berkeley earlier this month on just that topic.&lt;/p&gt;

&lt;p&gt;Given our focus on the development of software, one of the challenges of this model that we&#39;ve talked less about is the fact that it relies on users to review the permissions an application is requesting and make an educated decision about risk. It might be obvious that you shouldn’t let a free game make telephone calls, but what about motion sensors?&lt;/p&gt;

&lt;p&gt;This attack is not specific to Android, any device with accelerometers and gyroscopes could be exploited (including iOS devices and laptops, which do not share Android’s permission model), but it does raise questions about how a user should decide whether to install an application.&lt;/p&gt;

&lt;p&gt;(For those interested in a summary of the paper, &lt;a href=&quot;http://www.extremetech.com/mobile/92946-a-wiggly-approach-to-smartphone-keylogging&quot;&gt;ExtremeTech has an article&lt;/a&gt;.)
</description>
            <guid>http://blog.fortify.com/blog/2011/08/26/5C79663B8B1A947DC39975CF6068B909</guid>
			<pubDate>Fri, 26 Aug 2011 17:26:35 -0700</pubDate>
            <category>/Fortify/</category>
                                        <wfw:comment>http://blog.fortify.com/commentapi/default/Fortify/2011/08/26/5C79663B8B1A947DC39975CF6068B909</wfw:comment>
            <wfw:commentRss>http://blog.fortify.com/blog/2011/08/26/5C79663B8B1A947DC39975CF6068B909?page=comments&amp;flavor=rss2</wfw:commentRss>
                                </item>
                        <item>
            <title>Seven Ways to Hang Yourself with Google Android</title>
            <link>http://blog.fortify.com/blog/2011/08/19/Seven-Ways-to-Hang-Yourself-with-Google-Android</link>
            <description>&lt;p&gt;Remember my &lt;a href=&quot;http://blog.fortify.com/blog/2011/06/14/Tackling-Android-Inter-Process-Communication-and-Permissions&quot;&gt;earlier post&lt;/a&gt; on Android permissions where I complained about our inability to detect overprivileged Android applications due to the lack of documentation from Google? Well, guess what? A few days after the post went up, I was passed a link to &lt;a href=&quot;http://www.cs.berkeley.edu/~afelt/android_permissions.pdf&quot;&gt;this paper&lt;/a&gt;. Turns out our colleagues at UC Berkeley have been working on the same problem for the past year.&lt;/p&gt;

&lt;p&gt;We quickly got together and decided to collaborate. We think this work is a great example of collaboration between industry and academia on a problem that is so incredibly prevalent today. The first milestone of our collaboration is a talk at this year’s &lt;a href=&quot;https://www.defcon.org/html/defcon-19/dc-19-speakers.html#O%27Neil&quot;&gt;DEFCON&lt;/a&gt; convention in Las Vegas, which I co-presented with &lt;a href=&quot;http://www.eecs.berkeley.edu/~emc/&quot;&gt;Erika Chin&lt;/a&gt;. The talk was very well received. Check out &lt;a href=&quot;http://www.eecs.berkeley.edu/~emc/slides/SevenWaysToHangYourselfWithGoogleAndroid.pdf&quot;&gt;the slides&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;As I said, the talk is just the first milestone of our collaborative efforts – we are working together on incorporating research that has been done by the Berkeley team into Fortify SCA. Stay tuned for more updates on our Android support in the near future.&lt;/p&gt;
</description>
            <guid>http://blog.fortify.com/blog/2011/08/19/Seven-Ways-to-Hang-Yourself-with-Google-Android</guid>
			<pubDate>Fri, 19 Aug 2011 20:10:08 -0700</pubDate>
            <category>/Fortify/</category>
                                        <wfw:comment>http://blog.fortify.com/commentapi/default/Fortify/2011/08/19/Seven-Ways-to-Hang-Yourself-with-Google-Android</wfw:comment>
            <wfw:commentRss>http://blog.fortify.com/blog/2011/08/19/Seven-Ways-to-Hang-Yourself-with-Google-Android?page=comments&amp;flavor=rss2</wfw:commentRss>
                                </item>
                        <item>
            <title>XKCD on passwords</title>
            <link>http://blog.fortify.com/blog/2011/08/10/XKCD-on-passwords</link>
            <description>&lt;a href=&quot;http://xkcd.com/936/&quot;&gt;&lt;img src=&quot;http://imgs.xkcd.com/comics/password_strength.png&quot;&gt;&lt;/a&gt;
</description>
            <guid>http://blog.fortify.com/blog/2011/08/10/XKCD-on-passwords</guid>
			<pubDate>Wed, 10 Aug 2011 13:24:33 -0700</pubDate>
            <category>/Fortify/</category>
                                        <wfw:comment>http://blog.fortify.com/commentapi/default/Fortify/2011/08/10/XKCD-on-passwords</wfw:comment>
            <wfw:commentRss>http://blog.fortify.com/blog/2011/08/10/XKCD-on-passwords?page=comments&amp;flavor=rss2</wfw:commentRss>
                                </item>
                        <item>
            <title>Adding X-Ray technology to black box analysis tools: Part 2</title>
            <link>http://blog.fortify.com/blog/2011/08/04/Adding-X-Ray-technology-to-black-box-analysis-tools-Part-2</link>
            <description>As discussed (link to part 1), more accurate results can be found by introducing a hidden communication channel between HP WebInspect and Fortify SecurityScope. But wait, there more. Improving coverage to find issues on “hidden” pages is trivial when such communication channel exists. SecurityScope can point HP WebInspect to everything that is hard or impossible to find by an advanced web crawler. Pages that weren’t penetrated before can now be placed under attack. Pages that were visited before are now deeply penetrated, as the communication channel can point the black box analysis to hidden or hard to find parameters. These hard to find links and parameters will be found by a determined attacker with enough time on his hands. Now, they are simply exposed to the black box analysis tool and tested for security. As an example, a previously not found administrator page is now placed under attack:

&lt;br&gt;&lt;br&gt;
&lt;img src=&quot;http://blog.fortify.com/resources/default/admin.jpg&quot; alt=&quot;&quot;  width=&quot;750&quot; height=&quot;540&quot;/&gt;
&lt;br&gt;&lt;br&gt;


Getting the code fixed faster is another benefit from the underlying communication channel. As a security person, discussing the results from a black box analysis tool with the developer team can be quite frustrating. All the developers want to hear is how to fix their software; all the security person can provide is how to break it. As SecurityScope can observe the code being executed on the server, it’s able to transmit detailed point-of-exploit back to the black box analysis tool. The detailed source-level information can be incorporated with the regular report, which makes it more actionable for the developers. 

&lt;br&gt;&lt;br&gt;
&lt;img src=&quot;http://blog.fortify.com/resources/default/sourcelineinformation.jpg&quot; alt=&quot;&quot;  width=&quot;750&quot; height=&quot;540&quot;/&gt;
&lt;br&gt;&lt;br&gt;


In fact, it is not uncommon that multiple findings have a single point-of-exploit in the applications itself. As such, the information provided by the observer can be used to group duplicate findings and make the report much more actionable.
</description>
            <guid>http://blog.fortify.com/blog/2011/08/04/Adding-X-Ray-technology-to-black-box-analysis-tools-Part-2</guid>
			<pubDate>Thu, 4 Aug 2011 00:00:00 -0700</pubDate>
            <category>/Fortify/</category>
                                        <wfw:comment>http://blog.fortify.com/commentapi/default/Fortify/2011/08/04/Adding-X-Ray-technology-to-black-box-analysis-tools-Part-2</wfw:comment>
            <wfw:commentRss>http://blog.fortify.com/blog/2011/08/04/Adding-X-Ray-technology-to-black-box-analysis-tools-Part-2?page=comments&amp;flavor=rss2</wfw:commentRss>
                                </item>
                        <item>
            <title>Power of Customization</title>
            <link>http://blog.fortify.com/blog/2011/07/28/Power-of-Customization</link>
            <description>&lt;p&gt;Many of our customers use organization-specific coding standards and proprietary libraries in their software. The HP Fortify 
Secure Coding Rulepacks model a wide range of general security idioms and public APIs, but might leave analysis involving 
proprietary or unsupported third-party libraries incomplete and/or inaccurate. HP Fortify Custom Rules are designed to help 
address this gap and mitigate the risk. &lt;/p&gt;

&lt;p&gt;
Custom rules are a powerful tool for security auditors to expand on the current analysis capabilities. Custom Rules allow 
you to arm the analysis engine with the knowledge of your proprietary security standards and libraries that are not covered 
by the HP Fortify Secure Coding Rulepacks. Custom rules help tailor the analysis to the needs of your software and organization. &lt;/p&gt;

&lt;p&gt;
Writing custom rules can be intimidating since it requires knowledge of the standard APIs to model, vulnerabilities 
that these APIs might cause, and knowledge of the rules schema and constructs.  The Custom Rules Editor, 
a GUI tool built into HP Fortify Audit Workbench, provides various rule wizards and templates that guide the user through 
the rule writing process.  The auto-completion and type checking features within the editor are nice additions that help 
make the rule writing process easier. &lt;/p&gt;

&lt;p&gt;
The Fortify Security Research Group periodically updates the Custom Rules Editor wizards and templates to make the latest rules and 
enhancements available to the end user. The following new custom rule wizards were added last quarter: characterization rule for generic 
taint, characterization rule for private taint, structural rule for hardcoded passwords and control flow rules for memory leak. Starting 
last quarter these updates are now also made available as a separate content bundle through Premium Content.  This means you can get the 
latest custom rule writing capabilities without having to upgrade your HP Fortify SCA installation.  The Custom Rules Editor, along with 
the SCA Custom Rules Guide provide a very effective tool to enhance and tailor the analysis to meet your specific business needs.&lt;/p&gt;
</description>
            <guid>http://blog.fortify.com/blog/2011/07/28/Power-of-Customization</guid>
			<pubDate>Thu, 28 Jul 2011 18:18:16 -0700</pubDate>
            <category>/Fortify/</category>
                                        <wfw:comment>http://blog.fortify.com/commentapi/default/Fortify/2011/07/28/Power-of-Customization</wfw:comment>
            <wfw:commentRss>http://blog.fortify.com/blog/2011/07/28/Power-of-Customization?page=comments&amp;flavor=rss2</wfw:commentRss>
                                </item>
                        <item>
            <title>Critical Infrastructure</title>
            <link>http://blog.fortify.com/blog/2011/07/25/Critical-Infrastructure</link>
            <description>&lt;p&gt;Pundits often speak of critical infrastructure. Does the database of license plates qualify, I wonder?&lt;/p&gt;

&lt;img src=&quot;http://i.imgur.com/A3jNE.jpg&quot; alt=&quot;Does this belong to Little Bobby Tables&#39;? &quot; /&gt;
</description>
            <guid>http://blog.fortify.com/blog/2011/07/25/Critical-Infrastructure</guid>
			<pubDate>Mon, 25 Jul 2011 20:01:09 -0700</pubDate>
            <category>/Fortify/</category>
                                        <wfw:comment>http://blog.fortify.com/commentapi/default/Fortify/2011/07/25/Critical-Infrastructure</wfw:comment>
            <wfw:commentRss>http://blog.fortify.com/blog/2011/07/25/Critical-Infrastructure?page=comments&amp;flavor=rss2</wfw:commentRss>
                                </item>
                        <item>
            <title>NPR on Anonymous Arrests</title>
            <link>http://blog.fortify.com/blog/2011/07/21/NPR-on-Anonymous-Arrests-1</link>
            <description>&lt;p&gt;Recently, while listening to NPR, I was surprised to hear a reasonably informed, coherent discussion of &quot;cyber security&quot; from a mainstream media outlet. I especially like the &quot;what if&quot; scenarios from &lt;u&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Herbert_Hugh_Thompson&quot;&gt;Hugh Thompson&lt;/a&gt;&lt;/u&gt;. Here&#39;s an excerpt, but I recommend listening to the piece &lt;u&gt;&lt;a href=&quot;http://www.npr.org/2011/07/20/138555799/fbi-arrests-alleged-anonymous-hackers?ft=1&amp;f=2&amp;sc=17&quot;&gt;online&lt;/a&gt;&lt;/u&gt;:
&lt;/p&gt;
&lt;p&gt;
&lt;em&gt;The arrest Tuesday of 14 suspected members of the &quot;Anonymous&quot; hacking group was the result of what an FBI official calls &quot;good old fashioned investigative work&quot; over several months. The effort put into cracking the Anonymous group shows that U.S. authorities considered the hackers a potential national security threat, even if most of their activity to date has been relatively harmless. But it is not yet clear whether Tuesday&#39;s arrests netted the organizers of the group or merely those who had not been careful to cover their own tracks.&lt;/em&gt;&lt;/p&gt;
</description>
            <guid>http://blog.fortify.com/blog/2011/07/21/NPR-on-Anonymous-Arrests-1</guid>
			<pubDate>Thu, 21 Jul 2011 10:06:32 -0700</pubDate>
            <category>/Fortify/</category>
                                        <wfw:comment>http://blog.fortify.com/commentapi/default/Fortify/2011/07/21/NPR-on-Anonymous-Arrests-1</wfw:comment>
            <wfw:commentRss>http://blog.fortify.com/blog/2011/07/21/NPR-on-Anonymous-Arrests-1?page=comments&amp;flavor=rss2</wfw:commentRss>
                                </item>
                        <item>
            <title>IEEE Security &amp; Privacy Special Issue on Static Analysis</title>
            <link>http://blog.fortify.com/blog/2011/07/16/IEEE-Security-Privacy-Special-Issue-on-Static-Analysis</link>
            <description>Chris Wysopal and I have signed up to be guest editors for a issue of &lt;a href=&quot;http://www.computer.org/portal/web/security/home&quot;&gt;IEEE Security and Privacy Magazine&lt;/a&gt; focused on static analysis.  &lt;a href=&quot;http://www.computer.org/portal/web/computingnow/spcfp3&quot;&gt;The call for papers is here.&lt;/a&gt;
&lt;p&gt;
Static analysis for both security and reliability is in the midst of a golden age.  There’s significant interest from academia, vendors big and small, and for the first time ever, thousands of programmers and security professionals.  S&amp;P is an excellent forum for talking about what’s going on from any and all of those perspectives.  It doesn’t move at the speed of twitter, so you can actually present a complete and coherent thought, but it’s not nearly as stuffy as the IEEE Proceedings on Things That Happened a Decade Ago.
&lt;p&gt;
If you have an idea for a submission that you’d like to discuss, please feel free to get in touch with Chris or with me.  No need to wait for the August 15 deadline for abstracts.
</description>
            <guid>http://blog.fortify.com/blog/2011/07/16/IEEE-Security-Privacy-Special-Issue-on-Static-Analysis</guid>
			<pubDate>Sat, 16 Jul 2011 14:45:28 -0700</pubDate>
            <category>/Fortify/</category>
                                        <wfw:comment>http://blog.fortify.com/commentapi/default/Fortify/2011/07/16/IEEE-Security-Privacy-Special-Issue-on-Static-Analysis</wfw:comment>
            <wfw:commentRss>http://blog.fortify.com/blog/2011/07/16/IEEE-Security-Privacy-Special-Issue-on-Static-Analysis?page=comments&amp;flavor=rss2</wfw:commentRss>
                                </item>
                        <item>
            <title>Educating the Next Generation to Build Secure Software</title>
            <link>http://blog.fortify.com/blog/2011/07/14/Educating-the-Next-Generation-to-Build-Secure-Software</link>
            <description>&lt;p&gt;Last fall I had the pleasure of participating in the &lt;i&gt;Summit on Education in Secure Software&lt;/i&gt;, a two-day workshop conducted by Dr. Diana Burley of the George Washington University and Dr. Matt Bishop of the University of California, Davis. The workshop brought dozens of experts from academia, industry, and government together to discuss the challenges and opportunities for education to help address the challenges of building secure software systems. The result of the workshop is a hefty &lt;a href=http://nob.cs.ucdavis.edu/bishop/notes/2010-sess/2010-sess.pdf&gt;report&lt;/a&gt; outlining the summit’s goals and describing its findings. 
&lt;/p&gt;
&lt;p&gt;While some schools have begun to introduce targeted courses or lectures to address software security topics, even the most progressive schools are still a long way off from the kind of integrated and comprehensive treatment of secure software that most participants in the summit felt is required. Having graduated from a top CS program (UC Berkeley) not so long ago, I can say that teaching future computer scientists to build secure software remains a difficult problem.&lt;/p
&lt;p&gt;I hope that this project has helped shed light on some of the challenges that lie ahead, but I’m convinced that more work in this area will be necessary. I&#39;m also convinced that industry is going to play a critical role in both motivating efforts like these and providing expertise in practical ways to address the biggest issues in software security.&lt;/p&gt; 
</description>
            <guid>http://blog.fortify.com/blog/2011/07/14/Educating-the-Next-Generation-to-Build-Secure-Software</guid>
			<pubDate>Thu, 14 Jul 2011 09:56:18 -0700</pubDate>
            <category>/Fortify/</category>
                                        <wfw:comment>http://blog.fortify.com/commentapi/default/Fortify/2011/07/14/Educating-the-Next-Generation-to-Build-Secure-Software</wfw:comment>
            <wfw:commentRss>http://blog.fortify.com/blog/2011/07/14/Educating-the-Next-Generation-to-Build-Secure-Software?page=comments&amp;flavor=rss2</wfw:commentRss>
                                </item>
                        <item>
            <title>Adding X-Ray technology to black box analysis tools: Part 1</title>
            <link>http://blog.fortify.com/blog/2011/06/27/Adding-X-Ray-technology-to-black-box-analysis-tools-Part-1</link>
            <description>Black-box analysis tools, like HP&#39;s WebInspect (WI), rely on the response returned by the Web Server to analyze the impact of an attack on the behavior of a Web Application being assessed. However, in the absence of sufficient understanding of the server-side state of the Web Application, WI can only speculate the correlation between the variations in the application’s response content and the attacks sent to it. In fact, a web server or web application with proper error handling might make it virtually impossible for a black-box analysis tool to spot the exploits. So how can this be overcome?
&lt;br&gt;&lt;br&gt;
Fortify SecurityScope(SS) can be installed in the web application server to observe the execution of the web applications deployed on it. For example, every API call which executes a query against the database can be inspected. This provides SS with an insight into the behavior of the Web Application which WI lacks, thus allowing SS to accurately report successful vulnerability exploits to WI. Also, WI can leverage SS by communicating to it the purpose of a particular attack. SS can use this information to verify the successful execution of the action intended by WI through this attack. This hidden communication channel between WI and SS makes results way more accurate! (More to come in a follow up blog post, as accuracy is only one out of four big advantages this hidden communication channel provides)
&lt;br&gt;&lt;br&gt;
&lt;img src=&quot;http://blog.fortify.com/resources/default/wipp.jpg&quot; alt=&quot;&quot;  width=&quot;750&quot; height=&quot;540&quot;/&gt;
&lt;br&gt;&lt;br&gt;
&lt;img src=&quot;http://blog.fortify.com/resources/default/sqli.jpg&quot; alt=&quot;&quot; width=&quot;750&quot; height=&quot;540&quot;/&gt;
&lt;br&gt;&lt;br&gt;
In action, the interaction between WI and SS goes as follow. First, the attack web request (http://web/index?name=a&#39; or &#39;1&#39;=&#39;1) is made by WebInspect to the web server. In addition, WI informs SS that it is trying to exploit a SQLi by means of the attack vector 
&lt;pre&gt;&#39; or &#39;1&#39;=&#39;1&lt;/pre&gt;
Second, SecurityScope inspects the executed code java.sql. Statement.executeQuery() with parameter &lt;pre&gt;select * from db where first = &#39;a&#39; or &#39;1&#39;=&#39;1&#39; (NewClass.java:27)&lt;/pre&gt;
Regardless of what&#39;s sent back in the response stream, WI will know about this vulnerability through the hidden communication channel between WI and SS.
&lt;br&gt;&lt;br&gt;
This technique works great to improve the results of injection bugs. As such, this exists today (in 360 v 3.1.0) for SQLi, XSS, Command Injection, LFI, RFI and Arbitrary File Upload.
 
</description>
            <guid>http://blog.fortify.com/blog/2011/06/27/Adding-X-Ray-technology-to-black-box-analysis-tools-Part-1</guid>
			<pubDate>Mon, 27 Jun 2011 04:47:54 -0700</pubDate>
            <category>/Fortify/</category>
                                        <wfw:comment>http://blog.fortify.com/commentapi/default/Fortify/2011/06/27/Adding-X-Ray-technology-to-black-box-analysis-tools-Part-1</wfw:comment>
            <wfw:commentRss>http://blog.fortify.com/blog/2011/06/27/Adding-X-Ray-technology-to-black-box-analysis-tools-Part-1?page=comments&amp;flavor=rss2</wfw:commentRss>
                                </item>
                        <item>
            <title>Tackling Android Inter-Process Communication and Permissions</title>
            <link>http://blog.fortify.com/blog/2011/06/14/Tackling-Android-Inter-Process-Communication-and-Permissions</link>
            <description>&lt;p&gt;With more and more attention on mobile platforms, and Google Android specifically, Fortify’s Security Research Group decided to re-visit our Android support in the second quarter of the year. As a result, the main headline for the latest update to the Fortify Secure Coding Rulepacks is just that – enhanced rules support for the Google Android mobile platform. In addition to expanded rules coverage of the APIs, which results in the addition of 20 existing Fortify SCA categories, the new support also contains two big improvements. One of them is better modeling of attack surface specific to a mobile platform, and another is enforcement of best practices around Android provided and custom permissions.&lt;/p&gt;

&lt;p&gt;After spending so much time in the world of server-side enterprise code, thinking about mobile application security can be a challenge. In my opinion, the main difference between the two beasts is the fact that in the mobile world, in addition to having the same problems that exist in the server-side code model, one has to worry about two additional risks:&lt;/p&gt;

&lt;ul&gt;
        &lt;li&gt;A much higher chance of hardware loss&lt;/li&gt;
        &lt;li&gt;Inter-component communication 
&lt;/ul&gt;

&lt;p&gt;The consequences of the first should affect how and what kind of data should be stored on the device. For example, applications should not be writing sensitive data to external storage, since it will be accessible to anyone who gets a hold of the device. In the same manner, since mobile platforms are all about applications (potentially malicious) that can communicate with each other, applications should be careful about accepting input from and sharing sensitive data with other applications on the device. This UC Berkeley &lt;a href=&quot;http://www.cs.berkeley.edu/~daw/papers/intents-mobisys11.pdf&quot;&gt;paper&lt;/a&gt; does an excellent job explaining security risks involved in component interaction. In order to model this additional attack surface, which is not considered in the traditional server-side code model, Fortify SCA treats APIs related to inter-component communication as sources of untrusted data on the one hand, and privacy violation and system information leak sinks on the other.&lt;/p&gt;

&lt;p&gt;In order to protect components from each other and shield sensitive APIs from abuse by malicious applications, Android provides a sophisticated system of permissions. Permissions required by the application are requested at install time by the &lt;code&gt;AndroidManifest.xml&lt;/code&gt; configuration file that accompanies every Android application. When permissions are misused, however, a number of bad things can happen:&lt;/p&gt;

&lt;ol&gt;
        &lt;li&gt;Sensitive information can leak between applications&lt;/li&gt;
        &lt;li&gt;Untrusted input from a malicious application can trigger cross-site scripting, SQL injection, and other types of vulnerabilities in the target application&lt;/li&gt;
        &lt;li&gt;The application can be over-permissioned, which can be exploited by a malicious application&lt;/li&gt;
        &lt;li&gt;The application can simply fail if it does not have permissions it requires for proper execution&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Fortify SCA addresses three out of four problems listed above: the first two and the last one. The first two are addressed by the modeling of attack surface, which I describe earlier. The idea behind the solution to the last two problems is very simple: all we need to know is the mapping between the sensitive APIs that require permissions to be accessed and permissions themselves. Unfortunately, due to the lack of documentation from Google and various intricacies of the permissions system implementation, we were only able to generate a partial mapping. This partial mapping allows us to tell precisely which applications will fail at runtime because they don’t request the necessary permission, but the problem of over-permissioning can only be addressed when a complete mapping is available. &lt;/p&gt;

&lt;p&gt; I am extremely proud of what we managed to do and how enormously useful our solution is to developers, whose only choice up until now to figure out which permissions their application should request was trial and error. We are still working on and extremely interested in generating the full mapping between permissions and APIs that require them, so we will gladly accept any input from people out there who have stumbled upon the same problem.&lt;/p&gt;
</description>
            <guid>http://blog.fortify.com/blog/2011/06/14/Tackling-Android-Inter-Process-Communication-and-Permissions</guid>
			<pubDate>Tue, 14 Jun 2011 17:01:33 -0700</pubDate>
            <category>/Fortify/</category>
                                        <wfw:comment>http://blog.fortify.com/commentapi/default/Fortify/2011/06/14/Tackling-Android-Inter-Process-Communication-and-Permissions</wfw:comment>
            <wfw:commentRss>http://blog.fortify.com/blog/2011/06/14/Tackling-Android-Inter-Process-Communication-and-Permissions?page=comments&amp;flavor=rss2</wfw:commentRss>
                                </item>
                        <item>
            <title>Success</title>
            <link>http://blog.fortify.com/blog/2011/05/17/Success</link>
            <description>The third and final part of my discussion with &lt;a href=&quot;http://1raindrop.typepad.com/&quot;&gt;Gunnar Peterson&lt;/a&gt;.  Parts &lt;a href=&quot;http://blog.fortify.com/blog/2011/05/16/Man-Plus-Machine&quot;&gt;one&lt;/a&gt; and &lt;a href=&quot;http://blog.fortify.com/blog/2011/05/17/0F0DC3435F99B13FE448D463A2EA9C87&quot;&gt;two&lt;/a&gt;. 
&lt;p&gt;
&lt;span style=&quot;color: #00007f;&quot;&gt;GP:  So if the right answer is NOT to risk rank and cycle through, and I agree, what I think this also is saying is that the static analysis *team* should be building up real skills; because they are going deeper into a subset of apps. Beyond the wonders of the tools and process, I have come to think that success in technology projects is about people and teams. What factors have you observed that make people and teams succeed in software security over the long haul?&lt;/span&gt;
&lt;p&gt;
BC:  I&#39;ll tell you what&#39;s worked for me.
&lt;p&gt;
&lt;i&gt;For people:&lt;/i&gt;&lt;br&gt;
Being smart is important, but if you know how to program a computer, you&#39;re smart enough.  Now you have to put in a lot of hours.  A LOT OF HOURS.  Do something you really love because it&#39;s easier to sink all that time into it.
&lt;p&gt;
If you&#39;re like me and you&#39;d rather be sitting in front of a keyboard instead of dealing with people, figure out how you&#39;re going to get out and share your ideas.  Feedback makes a world of difference.
&lt;p&gt;
Ever wonder why so many programmers are so bad at security?  Part of the problem is that most of them don&#39;t know they&#39;re bad.  Generally speaking, people are bad at assessing their own strengths and weaknesses (read this: http://people.psych.cornell.edu/~dunning/publications/pdf/unskilledandunaware.pdf).  That means you need to seek objective measures of your work.  If it doesn&#39;t sting sometimes, you&#39;re not doing it right.
&lt;p&gt;
I like most of what Austin Kleon has to say in his &lt;a href= http://www.austinkleon.com/2011/03/30/how-to-steal-like-an-artist-and-9-other-things-nobody-told-me/”&gt;How to Steal Like an Artist&lt;/a&gt; talk.  He uses the word “artist” a lot.  Most of the artists out there haven’t figured out just how much they have in common with engineers.  Shhh.
&lt;p&gt;
&lt;i&gt;For teams:&lt;/i&gt;&lt;br&gt;
About a year after we hired the third round of people at Fortify, I wondered if we&#39;d really screwed up.  They hadn&#39;t come up the curve the way the first two rounds had.  I thought maybe we&#39;d gotten lax with our interview process, or maybe we had just gotten really lucky in the first two rounds, and the third round was payback.  Eventually I figured out that what had gone right with the first two rounds is that we&#39;d invested an incredible amount of time with them.  We&#39;d worked shoulder-to-shoulder in a cramped little office.  We&#39;d had lunch together almost every day for more than a year.  By the time round three arrived, all the old hands were either flying around speaking and visiting with customers (that was me), or they were desperately trying to type in all of the code people like me were saying absolutely must exist as of yesterday.  As a consequence, the new crowd didn&#39;t get anything close to the same amount of attention.
&lt;p&gt;
Moral to the story: building a great team takes a lot of interaction.  Work with people you like.  If you don&#39;t, that interaction will never happen, and you&#39;ll never form a good team.  But here&#39;s what makes interaction a really tough pursuit: the work we do requires a lot of concentration over an extended period, so everyone needs a quiet place to work.  There&#39;s tension between the need for interaction and the need for solitude.  A great team figures out how to get both.
&lt;p&gt;
The modern trend is towards distributed teams.  There is an unquestionable advantage to being able to pull people from any geography, but the ramp to being a good team is much longer because it&#39;s hard to accumulate the necessary amount of interaction.  
&lt;p&gt;
Regarding hiring for software security assurance jobs, look for software skills first and security skills second.  Security is not easy, but software is a bitch.
</description>
            <guid>http://blog.fortify.com/blog/2011/05/17/Success</guid>
			<pubDate>Tue, 17 May 2011 09:38:56 -0700</pubDate>
            <category>/Fortify/</category>
                                        <wfw:comment>http://blog.fortify.com/commentapi/default/Fortify/2011/05/17/Success</wfw:comment>
            <wfw:commentRss>http://blog.fortify.com/blog/2011/05/17/Success?page=comments&amp;flavor=rss2</wfw:commentRss>
                                </item>
                        <item>
            <title>Priorities</title>
            <link>http://blog.fortify.com/blog/2011/05/17/0F0DC3435F99B13FE448D463A2EA9C87</link>
            <description>Part two of my discussion with &lt;a href=&quot;http://1raindrop.typepad.com/&quot;&gt;Gunnar Peterson&lt;/a&gt;.  See also parts &lt;a href=&quot;http://blog.fortify.com/blog/2011/05/16/Man-Plus-Machine&quot;&gt;one&lt;/a&gt; and &lt;a href=&quot;http://blog.fortify.com/blog/2011/05/17/Success&quot;&gt;three&lt;/a&gt;.
&lt;p&gt;
&lt;span style=&quot;color: #00007f;&quot;&gt;GP: I really like your point about how companies should maximize their strengths. After all, why play a losers&#39; game? I can easily beat Michael Jordan. I just need to not play him at basketball. Instead of trying to outgun attackers, companies should look to focus on their core strengths.&lt;/span&gt;
&lt;p&gt;
&lt;span style=&quot;color: #00007f;&quot;&gt;A risk equation contains assets, threats and vulnerabilities. It’s highly likely for most companies that attackers will know current threats and vulnerabilities far better than the company, but the company _should_ know their assets better than the attacker, so why not play that game instead?&lt;/span&gt;
&lt;p&gt;
&lt;span style=&quot;color: #00007f;&quot;&gt;For companies that are getting started with static analysis, how should they prioritize assets when getting started with static analysis?&lt;/span&gt;
&lt;p&gt;
BC:  The whole Advanced Persistent Threat thing was a real eye-opener for me last year.  I&#39;m about a decade into this computer security gig, and all this time I thought I was primarily concerned with smart and capable attackers who think they have something to gain by going after the systems I&#39;m protecting.  Judging by the way APT was covered in the press, most of the computer security industry was still trying to protect against Code Red.
&lt;p&gt;
But now that we&#39;re all on the same page, I think it&#39;s pretty easy to see that the attacker has a few big advantages, namely:
&lt;ol&gt;
&lt;li&gt;Time.  You have to ship the software eventually.  The attacker gets from then on to find just one problem with what you built.
&lt;li&gt;Security knowledge.  Because the defender has to move first and because the world will know more about security tomorrow than it does today, it&#39;s reasonable to assume that your attacker will know about more vulnerabilities and attacks than you do.
&lt;li&gt;Resources.  If Anonymous decides to draw a bead on you, then they can spend more CPU cycles and engineering hours on the attack than you spent creating a defense.
&lt;/ol&gt;
&lt;p&gt;
What to do?  You spelled out the first two moves:
&lt;ul&gt;
&lt;li&gt;Use the defender&#39;s one natural advantage: we own the playing field.
&lt;li&gt;Since we can&#39;t do everything, there&#39;s no choice but to prioritize.
&lt;/ul&gt;
&lt;p&gt;
On the topic of prioritization, what if you were given one million dollars and told to defend your country&#39;s borders?  A million bucks is a lot of money, but it doesn&#39;t go very far when you&#39;re buying military hardware. Would you prioritize and decide to defend the Canadian border rather than the Mexican border?  They&#39;re both thousands of miles long, so maybe your prioritization exercise would suggest that you can only really be effective at protecting the Vermont border.  Pretty silly, huh?  The right thing to do with that million dollars is to spend it figuring out what a real defense would look like and then explaining the problems that stem from not getting the job done.
&lt;p&gt;
Applying the same idea to getting started with static analysis (or any other proactive security technique), the projects to get started with are the ones that will get you visibility into what&#39;s really going on in the organization&#39;s code, what&#39;s easy and what&#39;s difficult about working with the developers, and what you need to do to build the case for a full-fledged rollout.  Sometimes this means going after the flagship product because that&#39;s where new approaches have to prove their mettle. Sometimes it means working with the team your friend manages because they&#39;re the ones who will return your phone calls.  In any case, the right answer is NOT trying to risk-rank your apps and chew through them one at a time until the universe cools.
</description>
            <guid>http://blog.fortify.com/blog/2011/05/17/0F0DC3435F99B13FE448D463A2EA9C87</guid>
			<pubDate>Tue, 17 May 2011 09:31:34 -0700</pubDate>
            <category>/Fortify/</category>
                                        <wfw:comment>http://blog.fortify.com/commentapi/default/Fortify/2011/05/17/0F0DC3435F99B13FE448D463A2EA9C87</wfw:comment>
            <wfw:commentRss>http://blog.fortify.com/blog/2011/05/17/0F0DC3435F99B13FE448D463A2EA9C87?page=comments&amp;flavor=rss2</wfw:commentRss>
                                </item>
                        <item>
            <title>Man Plus Machine</title>
            <link>http://blog.fortify.com/blog/2011/05/16/Man-Plus-Machine</link>
            <description>Gunnar Peterson (of &lt;a href=&quot;http://1raindrop.typepad.com/&quot;&gt;1 Raindrop&lt;/a&gt; fame) asks good questions.  This week I tried to answer some of them.  Here&#39;s where we got started.  (The rest of the conversation is in parts &lt;a href=&quot;http://blog.fortify.com/blog/2011/05/17/0F0DC3435F99B13FE448D463A2EA9C87&quot;&gt;two&lt;/a&gt; and &lt;a href=&quot;http://blog.fortify.com/blog/2011/05/17/Success&quot;&gt;three&lt;/a&gt;.)
&lt;p&gt;
&lt;span style=&quot;color: #00007f;&quot;&gt;GP: There are some &lt;a href=&quot;http://www.chessbase.com/newsdetail.asp?newsid=6838&quot;&gt;recent studies&lt;/a&gt; of average chess players with a good process and computers, being able to beat chessmasters far above their ability, computers’ analytical ability extend the player’s competence. In most software security groups one of the biggest challenges is to scale. The software security team is typically a single digit percentage of the size of the development staff. How does automation on static analysis help these teams? What ways can software security teams scale out to maximize their impact on the development organization?&lt;/span&gt;
&lt;p&gt;
BC: I wasn&#39;t a particularly good math student when I was a kid.  All through grade school my mother (a math professor) would tell me &quot;you&#39;ll get better at it.&quot;  It turns out she was right, but not because I needed more practice.  She had figured out that I wasn&#39;t a reliable performer when it comes to the repetitive stuff--working a page of long division problems, for example.  Instead of practice, I just needed to get to the math classes where there was more concept and less grinding.  By the time I hit calculus, the balance tipped.
&lt;p&gt;
Computers are good at grinding.  In 2011 people are still a lot better at making intuitive leaps.  So the challenge for any team that needs to protect a big frontier is to find ways to let the computer do its thing and free them up to do theirs.  On the software security front, there are two big jobs to organize:
&lt;ol&gt;
&lt;li&gt;
Standardization.  Get your development teams to address the same security needs in the same way every time.  Help them share the best solutions.  Kick and scream when they decide to do things their own way.  It&#39;s a heck of a lot easier to figure out when someone is not using the standard solution than it is to figure out exactly how an attacker is going to outwit their homegrown hairball of a protection mechanism.
&lt;/li&gt;
&lt;li&gt;Automation.  Check all of the code for all of the dumb security mistakes programmers can make.  That means static analysis and dynamic analysis.  When you get good at standardization, you can rely less on having the automation find vulnerabilities and switch over to having it look for places where standards aren&#39;t being followed.  We&#39;re never going to automatically find all of the security problems in a piece of software, but we can take on some of the more tedious and error-prone work and give the security team more time to work on problems where humans do best.
&lt;/li&gt;
&lt;/ol&gt;
</description>
            <guid>http://blog.fortify.com/blog/2011/05/16/Man-Plus-Machine</guid>
			<pubDate>Mon, 16 May 2011 21:38:02 -0700</pubDate>
            <category>/Fortify/</category>
                                        <wfw:comment>http://blog.fortify.com/commentapi/default/Fortify/2011/05/16/Man-Plus-Machine</wfw:comment>
            <wfw:commentRss>http://blog.fortify.com/blog/2011/05/16/Man-Plus-Machine?page=comments&amp;flavor=rss2</wfw:commentRss>
                                </item>
                        <item>
            <title>NoSQL == no injections?</title>
            <link>http://blog.fortify.com/blog/2011/04/27/NoSQL-no-SQL-injections</link>
            <description>&lt;p&gt;
NoSQL databases are typically non-relational and as a result, do not employ SQL. However, some&amp;mdash;but not all&amp;mdash;do use SQL-like &lt;code&gt;SELECT&lt;/code&gt; statements to form queries. The NoSQL movement has been gaining traction in recent years, touting better simplicity, performance, and scalability over their relational counterparts. With the movement&#39;s growing popularity, a mishmash of NoSQL implementations cropped up on the scene with varying approaches to managing data, running the entire gamut from document stores (such as MongoDB) to key-value stores (such as Google&#39;s BigTable) to graph databases (such as Twitter&#39;s FlockDB).
&lt;/p&gt;

&lt;p&gt;
There has been some confusion as to whether NoSQL databases are vulnerable to SQL injection-style attacks. After all, how would we inject SQL into something that does not use SQL? MongoDB, which does not use SQL-esque &lt;code&gt;SELECT&lt;/code&gt; statements for database queries, even has an &lt;a href=&quot;http://www.mongodb.org/display/DOCS/Do+I+Have+to+Worry+About+SQL+Injection&quot;&gt;FAQ&lt;/a&gt; that weighs in on this: &quot;Generally, with MongoDB we are not building queries from strings, so traditional SQL Injection attacks are not a problem.&quot; While this statement is technically true, it is somewhat misleading. Many misinterpret this to mean that they are safe from all other kinds of injection exploits, without noting the keyword here: &lt;i&gt;traditional&lt;/i&gt;.
&lt;/p&gt;

&lt;p&gt;
Let&#39;s take a step back and look at a SQL injection attack from its core. The SQL structured language contains a mix of &lt;i&gt;data&lt;/i&gt;, such as column names, and &lt;i&gt;code&lt;/i&gt;, such as operators and conditionals. SQL injection occurs when unescaped meta characters&amp;mdash;often single quotes&amp;mdash;trick the parser into interpreting attacker-supplied data as code. When viewed this way, it&#39;s easy to understand why NoSQL databases may also be vulnerable to their own types of injections. A NoSQL database&#39;s query language, whatever that may be, inevitably must contain representations of both data and code. As long as attackers are able to exploit meta characters in a data string to force a context switch between data and logic, there is fertile ground for injection exploits.
&lt;/p&gt;

&lt;p&gt;
In other words, not employing SQL explicitly does &lt;i&gt;not&lt;/i&gt; make NoSQL databases secure against other types of injection attacks against their own query languages. 
&lt;/p&gt;

&lt;p&gt;
Consider the Amazon Web Services SimpleDB service, which does use a SQL-esque &lt;code&gt;SELECT&lt;/code&gt; syntax. The following code snippet might be from an application that allows previously-authenticated customers to search for their own invoices that match a user-specified category.
&lt;/p&gt;

&lt;pre&gt;AmazonSimpleDBClient sdbc = new AmazonSimpleDBClient(appAWSCredentials);
String query = &quot;select * from invoices where productCategory = &#39;&quot;
            + productCategory + &quot;&#39; and customerID = &#39;&quot;
            + customerID + &quot;&#39; order by &#39;&quot;
            + sortColumn + &quot;&#39; asc&quot;;
SelectResult sdbResult = sdbc.select(new SelectRequest(query));
&lt;/pre&gt;

&lt;p&gt;
The intended query might look something like this:
&lt;/p&gt;

&lt;pre&gt;
select * from invoices
where productCategory = &#39;&lt;em&gt;Fax Machines&lt;/em&gt;&#39;
and customerID = &#39;&lt;em&gt;12345678&lt;/em&gt;&#39;
order by &#39;&lt;em&gt;price&lt;/em&gt;&#39; asc
&lt;/pre&gt;

&lt;p&gt;
But what if an attacker supplies the string &lt;code&gt;&lt;em&gt;Fax Machines&#39; or productCategory = \&quot;&lt;/em&gt;&lt;/code&gt; as his product category, and to sort by the column named &lt;code&gt;&lt;em&gt;\&quot; order by &#39;price&lt;/em&gt;&lt;/code&gt;? SimpleDB would then see the following statement (newlines added for human readability):
&lt;/p&gt;

&lt;pre&gt;select * from invoices
where productCategory = &#39;&lt;em&gt;Fax Machines&#39;
or productCategory = &quot;&lt;/em&gt;&#39; and customerID = &#39;12345678&#39; order by &#39;&lt;em&gt;&quot;
order by &#39;price&lt;/em&gt;&#39; asc
&lt;/pre&gt;

&lt;p&gt;
Note that this completely bypasses the &lt;code&gt;customerID = &#39;12345678&#39;&lt;/code&gt; clause, allowing an attacker to view Fax Machine invoices of every other customer.
&lt;/p&gt;

&lt;p&gt;
Databases that use SQL-like &lt;code&gt;SELECT&lt;/code&gt; statements aren&#39;t the only ones susceptible to injection attacks. Going back to MongoDB above, Phil in his Web App Security blog &lt;a href=&quot;http://www.idontplaydarts.com/2010/07/mongodb-is-vulnerable-to-sql-injection-in-php-at-least/&quot;&gt;cautions against injection attacks&lt;/a&gt; when MongoDB is deployed in conjunction with PHP. He provides the following example MongoDB query:
&lt;/p&gt;

&lt;pre&gt;
$collection-&amp;gt;find(array(
    &quot;username&quot; =&amp;gt; $_GET[&#39;username&#39;],
    &quot;passwd&quot; =&amp;gt; $_GET[&#39;passwd&#39;]
));
&lt;/pre&gt;

&lt;p&gt;
What happens if an attacker passes in &lt;code&gt;login.php?username=admin&amp;amp;passwd[$ne]=1&lt;/code&gt;? In this case, PHP &quot;helpfully&quot; turns &lt;code&gt;passwd[$ne]=1&lt;/code&gt; into an associative array, resulting in the following query:
&lt;/p&gt;

&lt;pre&gt;
$collection-&amp;gt;find(array(
    &quot;username&quot; =&amp;gt; &quot;admin&quot;,
    &quot;passwd&quot; =&amp;gt; array(&quot;$ne&quot; =&amp;gt; 1)
));
&lt;/pre&gt;

&lt;p&gt;
In other words, it will return every &lt;code&gt;admin&lt;/code&gt; whose password is not &lt;code&gt;1&lt;/code&gt;, which is (hopefully) likely to be most admins.
&lt;/p&gt;

&lt;p&gt;
The takeaway message is that it&#39;s never safe to assume that a piece of software is secure just because it doesn&#39;t appear to contain any familiar vulnerabilities. No matter how many times this piece of advice has been rehashed, it&#39;s always worth repeating: Always validate your input!
&lt;/p&gt;
</description>
            <guid>http://blog.fortify.com/blog/2011/04/27/NoSQL-no-SQL-injections</guid>
			<pubDate>Wed, 27 Apr 2011 05:03:24 -0700</pubDate>
            <category>/Fortify/</category>
                                        <wfw:comment>http://blog.fortify.com/commentapi/default/Fortify/2011/04/27/NoSQL-no-SQL-injections</wfw:comment>
            <wfw:commentRss>http://blog.fortify.com/blog/2011/04/27/NoSQL-no-SQL-injections?page=comments&amp;flavor=rss2</wfw:commentRss>
                                </item>
                        <item>
            <title>An Important Tool in an Auditor&#39;s Toolbox</title>
            <link>http://blog.fortify.com/blog/2011/04/14/An-Important-Tool-in-an-Auditors-Toolbox-1</link>
            <description>&lt;p&gt;Security auditors today are faced with large numbers of vulnerabilities that they must organize and prioritize. In HP Fortify products, Filter Sets and Folders provide auditors with the right tools to tackle this formidable task in a systematic and efficient way.&lt;/p&gt;

&lt;p&gt;Out-of-the-box, we provide default filter sets to focus auditors&#39; attention on critical issues, but users aren&#39;t limited to using these. Instead, you can modify the default filter sets or create customized filter sets that best address your organization&#39;s needs.&lt;/p&gt;

&lt;p&gt;To help demonstrate the power of this capability, I will share a few examples here.&lt;/p&gt;

&lt;p&gt;Let&#39;s say your organization considers persistent cross-site scripting (Cross-Site Scripting: Persistent) issues to be at a lower risk than reflect cross-site scripting (Cross-Site Scripting: Reflected) issues. As shown below, Folder Filters allow you to re-categorize the Cross-Site Scripting: Persistent issues from a higher priority folder, in this case, Critical, to a lower priority folder such as High or even to a custom folder that you can create.&lt;/p&gt;

&lt;br&gt;&lt;br&gt;
&lt;img src=&quot;http://blog.fortify.com/resources/default/move-issue.jpg&quot; alt=&quot;MOVE-FOLDERS&quot; width=&quot;720&quot; height=&quot;450&quot;/&gt;
&lt;br&gt;&lt;br&gt;

&lt;p&gt;In another example, consider the security team has audited the result set and marked all the must fix issues as Exploitable. You may want to file these issues into one folder, label it &#39;Must Fix&#39; and send it to the development team for remediation. Here is an example filter that will allow you to do just that:&lt;/p&gt; 

&lt;br&gt;&lt;br&gt;
&lt;img src=&quot;http://blog.fortify.com/resources/default/must-fix-folder.jpg&quot; alt=&quot;CUSTOM-FOLDER&quot; width=&quot;720&quot; height=&quot;450&quot; /&gt;
&lt;br&gt;&lt;br&gt;

&lt;p&gt;In large enterprises, where multiple teams are often involved in the development effort, you may want to further categorize the issues by the development team to whom the issue belongs. If the organization name is noted in the issue comment, the example below shows how a query can be constructed to search for all Exploitable issues owned by the Core Development team and place them under the &#39;Must Fix Core Dev Team&#39; folder.&lt;/p&gt; 

&lt;br&gt;&lt;br&gt;
&lt;img src=&quot;http://blog.fortify.com/resources/default/core-dev..jpg&quot; alt=&quot;REGEX&quot; width=&quot;570&quot; height=&quot;340&quot; /&gt;
&lt;br&gt;&lt;br&gt;

&lt;p&gt;As a last example, we will consider a scenario where auditors want to restrict the result view to a certain subset of issues. This is especially useful in the case of very large result sets and can be accomplished using a Visibility Filter.&lt;/p&gt; 

&lt;p&gt;An example of the visibility filter is shown below. We have created a new Filter Set called Team Filter Set. It uses a visibility filter to restrict the view to issues belonging to the Core Development Team.   The Filter Set then further categorizes the issues into two folders, Must Fix and Review to help prioritize the work.&lt;/p&gt;
&lt;br&gt;&lt;br&gt;
&lt;img src=&quot;http://blog.fortify.com/resources/default/visibility-filter.jpg&quot; alt=&quot;VISIBLITY-FILTER&quot; width=&quot;720&quot; height=&quot;220&quot;/&gt;
&lt;br&gt;&lt;br&gt;

&lt;p&gt;These are but a few examples of the multitude of applications for filter sets, which are among the most powerful tools in the auditor&#39;s toolbox for managing a stream of incoming issues. HP Fortify Audit Workbench GUI, provides an easy interface to help quickly customize and test filter sets and, once created, customized filter sets can be exported and/or uploaded to HP Fortify 360 Server for reuse by other users and projects.&lt;/p&gt;


</description>
            <guid>http://blog.fortify.com/blog/2011/04/14/An-Important-Tool-in-an-Auditors-Toolbox-1</guid>
			<pubDate>Thu, 14 Apr 2011 07:13:14 -0700</pubDate>
            <category>/Fortify/</category>
                                        <wfw:comment>http://blog.fortify.com/commentapi/default/Fortify/2011/04/14/An-Important-Tool-in-an-Auditors-Toolbox-1</wfw:comment>
            <wfw:commentRss>http://blog.fortify.com/blog/2011/04/14/An-Important-Tool-in-an-Auditors-Toolbox-1?page=comments&amp;flavor=rss2</wfw:commentRss>
                                </item>
                        <item>
            <title>The Amazing Life, Death, and Rebirth of Software Security Assurance</title>
            <link>http://blog.fortify.com/blog/2011/04/04/The-Amazing-Life-Death-and-Rebirth-of-Software-Security-Assurance</link>
            <description>Checkout this two minute teaser from a recording I did at RSA Conference 2011 of the talk formerly known as the Amazing Life, Death, and Rebirth of Software Security Assurance (aka The Evolution of Software Security Assurance for the boring marketing types). 
&lt;br&gt;
&lt;br&gt;
&lt;iframe title=&quot;YouTube video player&quot; width=&quot;480&quot; height=&quot;390&quot; src=&quot;http://www.youtube.com/embed/iH-jHEjJusE&quot; frameborder=&quot;0&quot; allowfullscreen&gt;&lt;/iframe&gt;
</description>
            <guid>http://blog.fortify.com/blog/2011/04/04/The-Amazing-Life-Death-and-Rebirth-of-Software-Security-Assurance</guid>
			<pubDate>Mon, 4 Apr 2011 12:21:02 -0700</pubDate>
            <category>/Fortify/</category>
                                        <wfw:comment>http://blog.fortify.com/commentapi/default/Fortify/2011/04/04/The-Amazing-Life-Death-and-Rebirth-of-Software-Security-Assurance</wfw:comment>
            <wfw:commentRss>http://blog.fortify.com/blog/2011/04/04/The-Amazing-Life-Death-and-Rebirth-of-Software-Security-Assurance?page=comments&amp;flavor=rss2</wfw:commentRss>
                                </item>
                        <item>
            <title>Common Unzip Pitfall</title>
            <link>http://blog.fortify.com/blog/2011/03/31/Common-Unzip-Pitfall</link>
            <description>    &lt;p&gt;A few weeks ago, I investigated a customer report of a false positive. The issue was a Path Manipulation found in a web application that allows users to upload zip files. The program validates the uploaded filename, ensures it is alphanumeric and ends with “.zip”. The program then opens the zip file and unzips everything into a specific folder. Here is some representative code:
    &lt;/p&gt;
    &lt;pre&gt;		ZipInputStream zin = new ZipInputStream(...);
		while((entry = zin.getNextEntry()) != null) {
			// SCA reports Path Manipulation in the following line
			File file = new File(dir, entry.getName());			
		}    
    &lt;/pre&gt;
    &lt;p&gt;It took me just 10 minutes to write a test program to prove to the customer the file name stored in ZipEntry is an unvalidated string and can contain anything, including &lt;span style=&quot;font-family: Courier New&quot;&gt;&amp;quot;../&amp;quot;&lt;/span&gt;. The reported Path Manipulation is a true positive because an attacker can cause a file to be written to an arbitrary location.
    &lt;/p&gt;
    &lt;p&gt;And then I realized he would not be the only developer who believes ZipEntry is “safe”. I did some simple tests with the following zip files and unzip implementations:&lt;/p&gt;
    &lt;ul&gt;
        &lt;li&gt;Test case1: a zip file with a dot-dot-slash entry &lt;span style=&quot;font-family: Courier New; font-size: 90%&quot;&gt;
            &amp;quot;../abc.def&amp;quot;&lt;/span&gt; &lt;/li&gt;
        &lt;li&gt;Test case2: a zip file with Unicode dot-dot-slash entry &lt;span style=&quot;font-family: Courier New; font-size: 90%&quot;&gt;
            &amp;quot;%C0%AE%C0%AE/abc.def&amp;quot; &lt;/span&gt;&lt;/li&gt;
        &lt;li&gt;Test case3: a zip file with an absolute entry name &lt;span style=&quot;font-family: Courier New; font-size: 90%&quot;&gt;
            &amp;quot;/abc.def&amp;quot; &lt;/span&gt;&lt;/li&gt;
        &lt;li&gt;Test case4: a zip file with a special character between dot-dot &lt;span style=&quot;font-family: Courier New; font-size: 90%&quot;&gt;
            &amp;quot;.%03./abc.def&amp;quot; &lt;/span&gt;&lt;/li&gt;
    &lt;/ul&gt;
    &lt;p&gt;
        &lt;table cellspacing=&quot;0&quot; border=&quot;1&quot;&gt;
            &lt;tr style=&quot;background: gray&quot;&gt;&lt;th&gt;Name*&lt;/th&gt;&lt;th&gt;Vulnerable?&lt;/th&gt;&lt;th&gt;Comment&lt;/th&gt;&lt;/tr&gt;
            &lt;tr&gt;&lt;td&gt;7zip 9.2&lt;/td&gt;&lt;td&gt;No&lt;/td&gt;&lt;td&gt;It will strip “../” and continue to run without error&lt;/td&gt;&lt;/tr&gt;
            &lt;tr&gt;&lt;td&gt;WinXP SP2 Built-in Uncompress&lt;/td&gt;&lt;td&gt;No&lt;/td&gt;&lt;td&gt;It will prompt error message and stop&lt;/td&gt;&lt;/tr&gt;
            &lt;tr&gt;&lt;td&gt;WinRAR 3.71&lt;/td&gt;&lt;td&gt;No&lt;/td&gt;&lt;td&gt;It will strip “../” and continue to run without error&lt;/td&gt;&lt;/tr&gt;
            &lt;tr&gt;&lt;td&gt;Win32 unzip 5.42&lt;/td&gt;&lt;td style=&quot;background: red&quot;&gt;YES&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
            &lt;tr&gt;&lt;td&gt;Linux unzip 5.52&lt;/td&gt;&lt;td&gt;No&lt;/td&gt;&lt;td&gt;It will strip “../” and display a warning message&lt;/td&gt;&lt;/tr&gt;
            &lt;tr&gt;&lt;td&gt;JDK 1.6.0_23 &amp;quot;jar&amp;quot;&lt;/td&gt;&lt;td style=&quot;background: red&quot;&gt;YES&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
            &lt;tr&gt;&lt;td&gt;Tomcat 5.0, 5.5, 6.0&lt;/td&gt;&lt;td style=&quot;background: red&quot;&gt;YES&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
            &lt;tr&gt;&lt;td&gt;Tomcat 7.0.8&lt;/td&gt;&lt;td style=&quot;height: 23px&quot;&gt;No&lt;/td&gt;&lt;td&gt;It will throw exception&lt;/td&gt;&lt;/tr&gt;
        &lt;/table&gt;
        &lt;span style=&quot;font-size: xx-small&quot;&gt;* These are zip programs already installed on my laptop&lt;/span&gt;
    &lt;/p&gt;
    &lt;p&gt;For Tomcat, I created a WAR file with an entry &lt;span style=&quot;font-family: Courier New; font-size: 90%&quot;&gt;
            “../ROOT/index.html”&lt;/span&gt; and successfully overwrote the ROOT home page in Tomcat 5.0, 5.5 and 6.0. However, Tomcat 7 is not vulnerable and will throw an exception. But even if you are running a vulnerable version of Tomcat, you probably don’t need to rush to upgrade to Tomcat 7 unless you are running a J2EE web hosting service. If anyone can deploy an application to your Tomcat server, you have a bigger problem than Path Manipulation.&lt;/p&gt;
</description>
            <guid>http://blog.fortify.com/blog/2011/03/31/Common-Unzip-Pitfall</guid>
			<pubDate>Thu, 31 Mar 2011 17:48:16 -0700</pubDate>
            <category>/Fortify/</category>
                                        <wfw:comment>http://blog.fortify.com/commentapi/default/Fortify/2011/03/31/Common-Unzip-Pitfall</wfw:comment>
            <wfw:commentRss>http://blog.fortify.com/blog/2011/03/31/Common-Unzip-Pitfall?page=comments&amp;flavor=rss2</wfw:commentRss>
                                </item>
                        <item>
            <title>Context Sensitive Ranking</title>
            <link>http://blog.fortify.com/blog/2011/03/23/Context-Sensitive-Ranking</link>
            <description>&lt;p&gt;Time and time again, we hear complaints from our SCA customers about reporting vulnerabilities without taking validation logic into consideration. While deciding whether the data are properly validated is out of the question for any automatic tool (a discussion worthy of a separate blog post), there are a number of things the tools can do to aid the auditor in deciding the criticality of the finding. To start off, the analyzer can reprioritize the findings based on whether any kind of validation mechanism is detected during the scan. Obviously, the analyzer needs to base its decision on some piece of evidence, so why not show this additional information to the auditor? That way, instead of spending time digging through the application source code looking for this information, the auditor can concentrate on actually determining whether the validation mechanism is doing the right thing. Finally, it would also help a lot if the auditor could quickly search for reprioritized findings and easily distinguish them from those that were not.&lt;/p&gt;

&lt;p&gt;We call this feature Context Sensitive Ranking (CSR). And guess what? You can take advantage of it now if you use Fortify 360 v3.0 together with Q1’11 update to the Fortify Secure Coding Rulepacks. At this point, we support four validation frameworks: Struts I and II on the Java side and Microsoft ASP.NET Request Validation and WCF on the .NET side. To further illustrate this exciting feature, let’s consider an example.&lt;/p&gt; 

&lt;br&gt;&lt;br&gt;
&lt;img src=&quot;http://blog.fortify.com/resources/default/csr.jpg&quot; alt=&quot;CSR&quot; width=&quot;720&quot; height=&quot;450&quot;/&gt;
&lt;br&gt;&lt;br&gt;

&lt;p&gt;Above is a screenshot of a cross-site scripting finding in a sample web application scan project opened in the Fortify Audit Workbench. The application is written with Struts I framework. In Struts I, the application defines a set of action forms that represent input supplied by the user, a set of actions that can be performed on the data, and, optionally, a set of corresponding validators that get invoked implicitly by the framework and make sure that the data supplied by the user are well-formed. Cross-site scripting findings are usually prioritized as critical, but if we zoom in on the Issues view of the AWB, we can see that this particular cross-site scripting finding appears under the High folder. This is because it has been reprioritized by CSR.&lt;/p&gt;

&lt;br&gt;&lt;br&gt;
&lt;img src=&quot;http://blog.fortify.com/resources/default/csr-filterset.jpg&quot; alt=&quot;CSR-FilterSet&quot; width=&quot;570&quot; height=&quot;540&quot;/&gt;
&lt;br&gt;&lt;br&gt;

&lt;p&gt;The finding shows that the application is vulnerable to cross-site scripting because user input enters the application via the &lt;code&gt;name&lt;/code&gt; field of the &lt;code&gt;XSS20Form&lt;/code&gt; and gets written to the web page. So how does context-sensitive ranking help the auditor decide the criticality of the issue?&lt;/p&gt;

&lt;br&gt;&lt;br&gt;
&lt;img src=&quot;http://blog.fortify.com/resources/default/csr-evidence.jpg&quot; alt=&quot;CSR-Evidence&quot; width=&quot;700&quot; height=&quot;450&quot;/&gt;
&lt;br&gt;&lt;br&gt;

&lt;p&gt;If we expand the arrow next to Struts Validation in the Analysis Evidence view, we get to see additional evidence accompanying the finding. We can see that the application defines the validator for the&lt;code&gt; name&lt;/code&gt; field of the &lt;code&gt;XSS20Form&lt;/code&gt;. The auditor can now review the logic behind the validator to decide whether it is sufficient to prevent cross-site scripting. And to top it all, the auditor can use the Data Validation filter set in order to quickly identify the findings that are reprioritized when validation logic is detected by the SCA engine. The cross-site scripting issue we are discussing here appears under the Struts Validation folder.&lt;p&gt;

&lt;p&gt;Context Sensitive Ranking applies to any type of vulnerability and any type of context. Even though in the first incarnation of the feature the focus was on validation frameworks, we are planning on extending CSR to other types of contexts. And of course, we’ll keep you posted on our progress.&lt;/p&gt;
</description>
            <guid>http://blog.fortify.com/blog/2011/03/23/Context-Sensitive-Ranking</guid>
			<pubDate>Wed, 23 Mar 2011 11:13:41 -0700</pubDate>
            <category>/Fortify/</category>
                                        <wfw:comment>http://blog.fortify.com/commentapi/default/Fortify/2011/03/23/Context-Sensitive-Ranking</wfw:comment>
            <wfw:commentRss>http://blog.fortify.com/blog/2011/03/23/Context-Sensitive-Ranking?page=comments&amp;flavor=rss2</wfw:commentRss>
                                </item>
                        <item>
            <title>Introducing Real-Time Hybrid Correlation: SAST-DAST Issue Correlation</title>
            <link>http://blog.fortify.com/blog/2011/03/07/The-first-effective-way-to-correlate-SAST-and-DAST-issues</link>
            <description>Real-Time Hybrid Correlation addresses the problems of individual vulnerability detection techniques by correlating vulnerability data from multiple sources. The most common complaint a security practitioner has when looking at results from a black-box analysis, like HP&#39;s WebInspect, is that the results are hard to act on. The most common complaint when looking at static analysis results (like Fortify SCA) is that they are prone to false positives. Correlating the results of both of these techniques overcomes the shortcomings of both to produce reliable, actionable results.
&lt;br&gt;&lt;br&gt;
&lt;a href=&quot;http://blog.fortify.com/blog/2010/06/11/The-First-Step-towards-Hybrid-Analysis&quot;&gt;We have shown&lt;/a&gt; that we can enhance SCA to produce information which can glue black-box analysis results and static analysis issues together. Now we are providing a second key element, called Fortify SecurityScope, that produces the &quot;glue&quot; information required for correlation. SecurityScope has the unique capability to see both web request and the execution of the code. The complete workflow, and how all of these pieces fit together is shown below.
 &lt;br&gt;&lt;br&gt;
&lt;img src=&quot;http://blog.fortify.com/resources/default/hybrid.jpg&quot; alt=&quot;SAST-RAST-DAST&quot; width=&quot;720&quot; height=&quot;540&quot;/&gt;
&lt;br&gt;&lt;br&gt;
 
In action, the information gathering and correlation process goes as follow. First, the attack web request (http://company.com/index?name=â or &#39;1&#39;=&#39;1) is made by WebInspect to the webserver and is recorded by both WebInspect and SecurityScope. A unique id (ID=234) is used to correlate the WebInspect with the SecurityScope results. Second, SecurityScope inspects the executed code (NewClass.java:27) and searches for similar, known issues produced by SCA. SCA reveals the analysis evidence in the code (Source: in.jsp:33:getParameter(), ..., Sink: NewClass.java:27:java.sql.Statement.executeQuery()). The result is three pieces of solid evidence for one issue.
 &lt;br&gt; &lt;br&gt;
 
This approach is extremely valuable in rooting out server-side injection bugs. Black-box analysis tools do a great job sending out attack vectors to the application, but they have problems validating the intended impact of the attack on the server-side components and pointing out the problem in code. SecurityScope augments black-box testing by validating the attack. SCA does great job pointing out the problem in code. Combined, these three techniques will revolutionize the way we do software security.
</description>
            <guid>http://blog.fortify.com/blog/2011/03/07/The-first-effective-way-to-correlate-SAST-and-DAST-issues</guid>
			<pubDate>Mon, 7 Mar 2011 12:00:32 -0800</pubDate>
            <category>/Fortify/</category>
                                        <wfw:comment>http://blog.fortify.com/commentapi/default/Fortify/2011/03/07/The-first-effective-way-to-correlate-SAST-and-DAST-issues</wfw:comment>
            <wfw:commentRss>http://blog.fortify.com/blog/2011/03/07/The-first-effective-way-to-correlate-SAST-and-DAST-issues?page=comments&amp;flavor=rss2</wfw:commentRss>
                                </item>
                        <item>
            <title>Java Denial of Service Vulnerability (Double Trouble)</title>
            <link>http://blog.fortify.com/blog/2011/02/08/Double-Trouble</link>
            <description>&lt;b&gt;The Back Story&lt;/b&gt;&lt;br&gt;
Most versions of Java and some versions of PHP enter an infinite loop trying to turn the string &quot;2.2250738585072012e-308&quot; into a double precision floating point value.  (Remember scientific notation?  Floats and doubles are good for representing really big and really small numbers.  Very important for getting the physicists to shell out for supercomputers.) &lt;a href=&quot;http://www.exploringbinary.com/java-hangs-when-converting-2-2250738585072012e-308/&quot;&gt;Here are the details on the bugs&lt;/a&gt;.
&lt;p&gt;
This is a recipe for a quick and easy denial of service attack.  If you have a Java application that does something as simple as this:&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;code&gt;Double.parseDouble(request.getParameter(&quot;d&quot;));&lt;/code&gt;&lt;br&gt;
attackers can wedge a thread every time they make an HTTP request.  Now Anonymous doesn&#39;t need a botnet army to take your app offline.  A laptop with an AOL dialup connection should be plenty.
&lt;p&gt;
From a language perspective, the situation for PHP is worse because of PHP&#39;s type coercion (Looks like a double?  Parse it like a double.)  But only versions 5.2 and 5.3 of PHP are vulnerable, and the PHP team released a patch last month. 
&lt;p&gt;
For Java, the problem isn&#39;t a single number.  There is a small range of numbers that cause the conversion to hang.  But there are lots of ways to write any given floating point number, so those itty-bitty numbers turn into an enormous volume of potential input strings.  (For example, the strings &quot;2.2250738585072012e-308&quot; and &quot;0.022250738585072012e-00306&quot; are equally problematic.)  The upshot is that an attack is difficult to block from the network layer without catching some legitimate values too.
&lt;p&gt;
&lt;b&gt;The Tomcat Twist&lt;/b&gt;&lt;br&gt;
Think you&#39;re not vulnerable because your program doesn&#39;t use any doubles?  Wrong answer.  Tomcat uses &lt;code&gt;parseDouble()&lt;/code&gt; on the value of the Accept-Language HTTP header when an application calls &lt;code&gt;request.getLocale()&lt;/code&gt;.  If your application takes locale into account, chances are it&#39;s vulnerable.  This isn&#39;t the only under-the-covers place doubles are lurking, so the absence of direct calls to methods such as &lt;code&gt;Double.parseDouble()&lt;/code&gt; or &lt;code&gt;Double.valueOf()&lt;/code&gt; doesn&#39;t mean you&#39;re guaranteed safe.  And chances are good Tomcat isn&#39;t the only bit of Java middleware or framework code that uses a double.
&lt;p&gt;
&lt;b&gt;The Punchline&lt;/b&gt;&lt;br&gt;
This bug is an excellent example of the evolving software security landscape.  Until this problem came along, calling &lt;code&gt;parseDouble()&lt;/code&gt; looked like an ideal way to validate input.  Now &lt;code&gt;parseDouble()&lt;/code&gt; is yet another weak point to protect.  And so it goes.  When you ship software, you have to make sure it&#39;s protected against the risks we know about today.  But when you wake up tomorrow, new risks may well have emerged during the night.  Building secure systems means more than just avoiding foreseeable mistakes.  It means preparing for the unforeseeable too.  That means being ready to respond when new vulnerabilities emerge.
&lt;p&gt;
&lt;b&gt;Next Steps&lt;/b&gt;&lt;br&gt;
Oracle and Tomcat have released patches this week.  We expect other Java providers (such as IBM) to follow suit.  But it will be quite a while before those fixes are widely deployed.  Until then, here&#39;s what we&#39;re doing:

&lt;ul&gt;
&lt;li&gt;We have released a Fortify Real-Time Analyzer (RTA) rulepack that protects against the attack at the code level.  It monitors calls to the underlying class and flags calls that will cause the thread to hang.  If desired, it can patch the code so that the vulnerability no longer exists.  All without taking the app offline.  Just saying.
&lt;li&gt;Next week the HP Application Security Center (ASC) will release a check for WebInspect so that vulnerable applications can be identified during security testing.
&lt;li&gt;The next Fortify Secure Coding Rulepack update for SCA (to be released at the end of February) will include static analysis rules to detect code that is vulnerable to an attack on methods such as &lt;code&gt;parseDouble()&lt;/code&gt; and &lt;code&gt;getLocale()&lt;/code&gt;.
&lt;/ul&gt;
</description>
            <guid>http://blog.fortify.com/blog/2011/02/08/Double-Trouble</guid>
			<pubDate>Tue, 8 Feb 2011 13:03:39 -0800</pubDate>
            <category>/Fortify/</category>
                                        <wfw:comment>http://blog.fortify.com/commentapi/default/Fortify/2011/02/08/Double-Trouble</wfw:comment>
            <wfw:commentRss>http://blog.fortify.com/blog/2011/02/08/Double-Trouble?page=comments&amp;flavor=rss2</wfw:commentRss>
                                </item>
                        <item>
            <title>Fortify at RSA Conference 2011</title>
            <link>http://blog.fortify.com/blog/2011/01/13/Fortify-at-RSA-2011</link>
            <description>&lt;p&gt;We here in the Fortify corner of HP will be giving several talks at the RSA  Conference 2011 in San Francisco next month and I wanted to take an opportunity to tell you about two of them that excite me the most. 
&lt;/p&gt;
&lt;p&gt;
At 10:00AM on Wednesday 2/16 I’ll deliver a talk titled &lt;i&gt;&lt;b&gt;The Evolution of Software Security Assurance and Its Relevance Today&lt;/i&gt;&lt;/b&gt;. We all know secure software means threat modeling, code review, penetration testing, and a plethora of other activities we take for granted. Right? Starting with Saltzer and Schroeder, this talk explores the origins, evolution, and use of these activities and others. Throughout, we share deployment experience and relate the discussion to living standards, such as Microsoft SDL, OWASP Top 10, and PCI DSS.
&lt;/p&gt;
&lt;p&gt;
Immediately following my talk at 11:10AM (still Wednesday 2/16) Brian Chess and I continuing the tradition we started with the &lt;a href=&quot;http://www.internetnews.com/security/article.php/3692016/Iron-Chef-Black-Hat.htm&quot;&gt;Iron Chef&lt;/a&gt; series of security competitions (conducted at Black Hat shows past) by leading a panel of experts in &lt;i&gt;&lt;b&gt;Extreme Makeover: Open Source Edition&lt;/i&gt;&lt;/b&gt;. In the spirit of ABC&#39;s reality TV show, we will bring the combined experience of our panel to bear on a critique of the open source project’s security. This lighthearted session is for newbies who want to watch a real live dissection take place and pros who need a dose of schadenfreude.
&lt;/p&gt;
</description>
            <guid>http://blog.fortify.com/blog/2011/01/13/Fortify-at-RSA-2011</guid>
			<pubDate>Thu, 13 Jan 2011 15:54:23 -0800</pubDate>
            <category>/Fortify/</category>
                                        <wfw:comment>http://blog.fortify.com/commentapi/default/Fortify/2011/01/13/Fortify-at-RSA-2011</wfw:comment>
            <wfw:commentRss>http://blog.fortify.com/blog/2011/01/13/Fortify-at-RSA-2011?page=comments&amp;flavor=rss2</wfw:commentRss>
                                </item>
                        <item>
            <title>Handling Managed Beans</title>
            <link>http://blog.fortify.com/blog/2010/12/17/Handling-Managed-Beans</link>
            <description>&lt;p&gt;Fortify SCA has built-in support for a number of web frameworks: Struts 1 and 2, Spring, JSF, ADF, and various others. More and more frameworks adopt the notion of managed beans – the type of beans that contain the data and underlying logic of the application, and can be accessed by the UI components on the page through bindings to bean properties. Analyzing applications written in such frameworks is tricky. In this post, I’d like to give you an idea of what Fortify SCA does under the covers in order to trace data flow through managed beans.&lt;/p&gt; 

&lt;p&gt;Let’s start by looking at an example. Here is an excerpt of a JSP page from a sample application written using JSF:&lt;/p&gt;

&lt;code&gt;
&amp;lt;h:inputTextarea id=&quot;reply&quot; label=&quot;Magic Number Comment&quot; value=&quot;#{Garbanzo.comment}&quot;/&amp;gt;
&lt;br/&gt;…
  &lt;br/&gt;Your comment was:
  &lt;br/&gt;#{Garbanzo.comment}
&lt;/code&gt;

&lt;p&gt;This piece of code is clearly vulnerable to cross-site scripting, since the value of &lt;code&gt;textarea&lt;/code&gt; can end up containing a malicious script injected by the user that later gets reflected back to the page. In this case, the analyzer does not even need to know what the &lt;code&gt;Garbanzo&lt;/code&gt; managed bean binds to. The analyzer can simply keep track of the fact that &lt;code&gt;Garbanzo.comment&lt;/code&gt; is tainted because it is accessed in an input tag, and report a vulnerability when it is accessed in an output tag. .&lt;/p&gt;

&lt;p&gt;A more complicated scenario requires the analyzer to know exactly what &lt;code&gt;Garbanzo&lt;/code&gt; binds to. The following configuration entries provide the necessary information:&lt;/p&gt;

&lt;code&gt;
   &amp;lt;managed-bean&amp;gt;
      &lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;managed-bean-name&amp;gt;Garbanzo&amp;lt;/managed-bean-name&amp;gt;
      &lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;managed-bean-class&amp;gt;com.foo.Garbanzo&amp;lt;/managed-bean-class&amp;gt;
      &lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;managed-bean-scope&amp;gt;session&amp;lt;/managed-bean-scope&amp;gt;
   &lt;br/&gt;&amp;lt;/managed-bean&amp;gt;
&lt;/code&gt;

&lt;p&gt;The &lt;code&gt;com.foo.Garbanzo&lt;/code&gt; class looks like this:&lt;/p&gt;

&lt;code&gt;
class Garbanzo {
    &lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;private String comment;

    &lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Garbanzo() {
        &lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;comment = “”;
    &lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}

    &lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;String getComment() {
        &lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return comment;
    &lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}

    &lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;void setComment(String comment) {
        &lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;this.comment = comment;
    &lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}

    &lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;String getComment2() {
        &lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return comment;
    &lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}

    &lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;void setComment2(String comment) {
        &lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;this.comment = comment;
    &lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&lt;br/&gt;}
&lt;/code&gt;

&lt;p&gt;The definition of the class makes it possible to access the &lt;code&gt;comment&lt;/code&gt; property via two different sets of getters and setters. Consider modifying the original example in the following way (changes are marked in bold):&lt;/p&gt;

&lt;code&gt;
&amp;lt;h:inputTextarea id=&quot;reply&quot; label=&quot;Magic Number Comment&quot; value=&quot;#{Garbanzo.comment}&quot;/&amp;gt;
&lt;br/&gt;…
  &lt;br/&gt;Your comment was:
  &lt;br/&gt;#{Garbanzo.&lt;b&gt;comment2&lt;/b&gt;}
&lt;/code&gt;

&lt;p&gt;In this case, the simple solution for tracking data flow through the &lt;code&gt;Garbanzo&lt;/code&gt; bean fails to catch the cross-site scripting vulnerability. A better solution is to let Fortify SCA emulate what the framework does underneath. Namely, the engine knows that accessing the bean property in an input tag actually means calling the setter of the corresponding field of a bean class, and accessing the bean property in an output tag means calling the corresponding getter. And the best part is, the mechanism for determining the bean class on which to call the right setter and getter is externalized to the rules, which makes it possible to support more than one framework that follows the same pattern of managed bean usage without updates to the SCA engine!&lt;/p&gt;

</description>
            <guid>http://blog.fortify.com/blog/2010/12/17/Handling-Managed-Beans</guid>
			<pubDate>Fri, 17 Dec 2010 10:10:11 -0800</pubDate>
            <category>/Fortify/</category>
                                        <wfw:comment>http://blog.fortify.com/commentapi/default/Fortify/2010/12/17/Handling-Managed-Beans</wfw:comment>
            <wfw:commentRss>http://blog.fortify.com/blog/2010/12/17/Handling-Managed-Beans?page=comments&amp;flavor=rss2</wfw:commentRss>
                                </item>
            </channel>
</rss>

