Finding Security Vulnerabilities in Java Applications With Static Analysis
Finding Security Vulnerabilities in Java Applications With Static Analysis
{livshits, lam}@cs.stanford.edu
2.2 Injecting Malicious Data A typical Web site using multiple forms, such as an on-
line store will likely rely on hidden fields to transfer state
Protecting Web applications against unchecked input
information between pages. Unlike regular fields, hid-
vulnerabilities is difficult because applications can obtain
den fields cannot be modified directly by typing values
information from the user in a variety of different ways.
into an HTML form. However, since the hidden field is
One must check all sources of user-controlled data such
part of the page source, saving the HTML page, editing
as form parameters, HTTP headers, and cookie values
the hidden field value, and reloading the page will cause
systematically. While commonly used, client-side filter-
the Web application to receive the newly updated value
ing of malicious values is not an effective defense strat-
of the hidden field.
egy. For example, a banking application may present the
user with a form containing a choice of only two account 2.2.4 HTTP Header Manipulation
numbers; however, this restriction can be easily circum- HTTP headers typically remain invisible to the user
vented by saving the HTML page, editing the values in and are used only by the browser and the Web server.
the list, and resubmitting the form. Therefore, inputs However, some Web applications do process these head-
must be filtered by the Web application on the server. ers, and attackers can inject malicious data into applica-
Note that many attacks are relatively easy to mount: an tions through them. While a normal Web browser will
attacker needs little more than a standard Web browser not allow forging the outgoing headers, multiple freely
to attack Web applications in most cases. available tools allow a hacker to craft an HTTP request
2.2.1 Parameter Tampering leading to an exploit [9]. Consider, for example, the
The most common way for a Web application to accept Referer field, which contains the URL indicating where
parameters is through HTML forms. When a form is sub- the request comes from. This field is commonly trusted
mitted, parameters are sent as part of an HTTP request. by the Web application, but can be easily forged by an
An attacker can easily tamper with parameters passed to attacker. It is possible to manipulate the Referer field’s
a Web application by entering maliciously crafted values value used in an error page or for redirection to mount
into text fields of HTML forms. cross-site scripting or HTTP response splitting attacks.
2500
Number of tainted objects
2250 Context-insensitive,
2000 default naming
1750 Context-insensitive,
1500 improved naming
1250
Context-sensitive,
1000 default naming
750
500 Context-sensitive,
improved naming
250
0
jboard blueblog webgoat blojsom personalblog snipsnap road2hibernate pebble roller
Benchmark applications
Figure 10: (a) Summary of data on the number of tainted objects, reported security violations, and false positives for each analysis version. Enabled
analysis features are indicated by X signs in the header row. (b) Comparison of the number of tainted objects for each version of the analysis.
the table shows the times to pre-process the application malicious input. Exploits may also be ruled out because
to create relations accepted by the pointer analysis; the of the particular configuration of the application, but con-
second shows points-to analysis times; the last presents figurations may change over time, potentially making ex-
times for the tainted object propagation analysis. ploits possible. For example, a SQL injection that may
It should be noted that the taint analysis times often not work on one database may become exploitable when
decrease as the analysis precision increases. Contrary the application is deployed with a database system that
to intuition, we actually pay less for a more precise an- does not perform sufficient input checking. Furthermore,
alysis. Imprecise answers are big and therefore take a virtually all static errors we found can be fixed easily by
long time to compute and represent. In fact, the context- modifying several lines of Java source code, so there is
insensitive analysis with default object naming runs sig- generally no reason not to fix them in practice.
nificantly slower on the largest benchmarks than the most After we ran our analysis, we manually examined all
precise analysis. The most precise analysis version takes the errors reported to make sure they represent security
a total of less than 10 minutes on the largest application; errors. Since our knowledge of the applications was not
we believe that this is acceptable given the quality of the sufficient to ascertain that the errors we found were ex-
results the analysis produces. ploitable, to gain additional assurance, we reported the
errors to program maintainers. We only reported to ap-
6.3 Vulnerabilities Discovered plication maintainers only those errors found in the ap-
The static analysis described in this paper reports a to- plication code rather than general libraries over which
tal of 41 potential security violations in our nine bench- the maintainer had no control. Almost all errors we re-
marks, out of which 29 turn out to be security errors, ported to program maintainers were confirmed, resulting
while 12 are false positives. All but one of the bench- in more that a dozen code fixes.
marks had at least one security vulnerability. Moreover, Because webgoat is an artificial application designed
except for errors in webgoat and one HTTP splitting vul- to contain bugs, we did not report the errors we found
nerability in snipsnap [16], none of these security er- in it. Instead, we dynamically confirmed some of the
rors had been reported before. statically detected errors by running webgoat, as well as
a few other benchmarks, on a local server and creating
6.3.1 Validating the Errors We Found actual exploits.
Not all security errors found by static analysis or code It is important to point out that our current analysis
reviews are necessarily exploitable in practice. The error ignores control flow. Without analyzing the predicates,
may not correspond to a path that can be taken dynam- our analysis may not realize that a program has checked
ically, or it may not be possible to construct meaningful its input, so some of the reported vulnerabilities may turn
XXX S INKS
X SQL injections HTTP splitting Cross-site scripting Path traversal Total
S OURCES XX
X
Header manip. 0 snipsnap = 6 blueblog: 1, webgoat: 1, pebble: 1, roller: 1 = 4 0 10
Parameter manip. webgoat: 4, personalblog: 2 = 6 snipsnap = 5 0 blojsom = 2 13
Cookie poisoning webgoat = 1 0 0 0 1
Non-Web inputs snipsnap: 1, road2hibernate: 1 = 2 0 0 snipsnap = 3 5
Total 9 11 4 5 29
Figure 11: Classification of vulnerabilities we found. Each cell corresponds to a combination of a source type (in rows) and sink type (in columns).
out to be false positives. However, our analysis shows all HTTP splitting was the most popular exploitation tech-
the steps involved in propagating taint from a source to a nique (11 cases). Many HTTP splitting vulnerabilities
sink, thus allowing the user to check if the vulnerabilities are due to an unsafe programming idiom where the ap-
found are exploitable. plication redirects the user’s browser to a page whose
Many Web-based application perform some form of URL is user-provided as the following example from
input checking. However, as in the case of the vulnera- snipsnap demonstrates:
bilities we found in snipsnap, it is common that some
checks are missed. It is surprising that our analysis did response.sendRedirect(
request.getParameter("referer"));
not generate any false warnings due to the lack of pred-
icate analysis, even though many of the applications we
Most of the vulnerabilities we discovered are in appli-
analyze include checks on user input. Two security er-
cation code as opposed to libraries. While errors in ap-
rors in blojsom flagged by our analysis deserve special
plication code may result from simple coding mistakes
mention. The user-provided input was in fact checked,
made by programmers unaware of security issues, one
but the validation checks were too lax, leaving room for
would expect library code to generally be better tested
exploits. Since the sanitization routine in blojsom was
and more secure. Errors in libraries expose all applica-
implemented using string operations as opposed to direct
tions using the library to attack. Despite this fact, we
character manipulation, our analysis detected the flow of
have managed to find two attack vectors in libraries: one
taint from the routine’s input to its output. To prove the
in a commonly used Java library hibernate and another
vulnerability to the application maintainer, we created
in the J2EE implementation. While a total of 29 security
an exploit that circumvented all the checks in the vali-
errors were found, because the same vulnerability vec-
dation routine, thus making path-traversal vulnerabilities
tor in J2EE is present in four different benchmarks, they
possible. Note that if the sanitation was properly imple-
actually corresponded to 26 unique vulnerabilities.
mented, our analysis would have generated some false
positives in this case.
6.3.3 SQL Injection Vector in hibernate
6.3.2 Classification of Errors We start by describing a vulnerability vector found
This section presents a classification of all the errors in hibernate, an open-source object-persistence library
we found. A summary of our experimental results is pre- commonly used in Java applications as a lightweight
sented in Figure 10(a). Columns 2 and 3 list the number back-end database. hibernate provides the function-
of source and sink objects for each benchmark. It should ality of saving program data structures to disk and load-
be noted that the number of sources and sinks for all of ing them at a later time. It also allows applications to
these applications is quite large, which suggests that se- search through the data stored in a hibernate database.
curity auditing these applications is time-consuming, be- Three programs in our benchmark suite, personalblog,
cause the time a manual security code review takes is road2hibernate, and snipsnap, use hibernate to
roughly proportional to the number of sources and sinks store user data.
that need to be considered. The table also shows the We have discovered an attack vector in code pertain-
number of vulnerability reports, the number of false pos- ing to the search functionality in hibernate, version
itives, and the number of errors for each analysis version. 2.1.4. The implementation of method Session.find re-
Figure 11 presents a classification of the 29 secu- trieves objects from a hibernate database by passing
rity vulnerabilities we found grouped by the type of the its input string argument through a sequence of calls to
source in the table rows and the sink in table columns. a SQL execute statement. As a result, all invocations of
For example, the cell in row 4, column 1 indicates Session.find with unsafe data, such as the two errors
that there were 2 potential SQL injection attacks caused we found in personalblog, may suffer from SQL injec-
by non-Web sources, one in snipsnap and another in tions. A few other public methods such as iterate and
road2hibernate. delete also turn out to be attack vectors. Our findings
Overall, parameter manipulation was the most com- highlight the importance of securing commonly used
mon technique to inject malicious data (13 cases) and software components in order to protect their clients.
6.3.4 Cross-site Tracing Attacks jboard, the most precise version on average reported 5
Analysis of webgoat and several other applications re- times fewer tainted objects than the least precise. More-
vealed a previously unknown vulnerability in core J2EE over, the number of tainted objects dropped more that 15-
libraries, which are used by thousands of Java applica- fold in the case of roller, our largest benchmark.
tions. This vulnerability pertains to the TRACE method To achieve a low false-positive rate, both context sen-
specified in the HTTP protocol. TRACE is used to echo sitivity and improved object naming are necessary. The
the contents of an HTTP request back to the client for number of false positives remains high for most pro-
debugging purposes. However, the contents of user- grams when only one of these analysis features is used.
provided headers are sent back verbatim, thus enabling One way to interpret the importance of context sensitiv-
cross-site scripting attacks. ity is that the right selection of object “names” in pointer
In fact, this variation of cross-site scripting caused analysis allows context sensitivity to produce precise re-
by a vulnerability in HTTP protocol specification was sults. While it is widely recognized in the compiler com-
discovered before, although the fact that it was present munity that special treatment of containers is necessary
in J2EE was not previously announced. This type of for precision, improved object naming alone is not gener-
attack has been dubbed cross-site tracing and it is re- ally sufficient to completely eliminate the false positives.
sponsible for CERT vulnerabilities 244729, 711843, and All 12 of the false positives reported by the
728563. Because this behavior is specified by the HTTP most precise version for our analysis were located
protocol, there is no easy way to fix this problem at in snipsnap and were caused by insufficient preci-
the source level. General recommendations for avoiding sion of the default allocation site-based object-naming
cross-site tracing include disabling TRACE functionality scheme. The default naming caused an allocation site
on the server or disabling client-side scripting [18]. in snipsnap to be conservatively considered tainted
because a tainted object could propagate to that al-
6.4 Analysis Features and False Positives location site. The allocation site in question is lo-
The version of our analysis that employs both context cated within StringWriter.toString(), a JDK func-
sensitivity and improved object naming described in Sec- tion similar to String.toLowerCase() that returns a
tion 4 achieves very precise results, as measured by the tainted String only if the underlying StringWriter is
number of false positives. In this section we examine constructed from a tainted string. Our analysis conser-
the contribution of each feature of our static analysis ap- vatively concluded that the return result of this method
proach to the precision of our results. We also explain may be tainted, causing a vulnerability to be reported,
the causes of the remaining 12 false positives reported by where none can occur at runtime. We should men-
the most precise analysis version. To analyze the impor- tion that all the false positives in snipsnap are elim-
tance of each analysis feature, we examined the number inated by creating a new object name at every call to,
of false positives as well as the number of tainted objects StringWriter.toString(), which is achieved with a
reported by each variation of the analysis. Just like false one-line change to the pointer analysis specification.
positives, tainted objects provide a useful metric for an-
alysis precision: as the analysis becomes more precise, 7 Related Work
the number of objects deemed to be tainted decreases. In this section, we first discuss penetration testing and
Figure 10(a) summarizes the results for the four differ- runtime monitoring, two of the most commonly used ap-
ent analysis versions. The first part of the table shows the proaches for finding vulnerabilities besides manual code
number of tainted objects reported by the analysis. The reviews. We also review the relevant literature on static
second part of the table shows the number of reported analysis for improving software security.
security violations. The third part of the table summa-
rizes the number of false positives. Finally, the last col- 7.1 Penetration Testing
umn provides the number of real errors detected for each Current practical solutions for detecting Web applica-
benchmark. Figure 10(b) provides a graphical represen- tion security problems generally fall into the realm of
tation of the number of tainted objects for different anal- penetration testing [3, 5, 15, 36, 44]. Penetration testing
ysis variations. Below we summarize our observations. involves attempting to exploit vulnerabilities in a Web
Context sensitivity combined with improved object application or crashing it by coming up with a set of
naming achieves a very low number of false positives. In appropriate malicious input values. Penetration reports
fact, the number of false positives was 0 for all applica- usually include a list of identified vulnerabilities [25].
tions but snipsnap. For snipsnap, the number of false However, this approach is incomplete. A penetration test
positives was reduced more than 50-fold compared to the can usually reveal only a small sample of all possible se-
context-insensitive analysis version with no naming im- curity risks in a system without identifying the parts of
provements. Similarly, not counting the small program the system that have not been adequately tested. Gener-
ally, there are no standards that define which tests to run The security type system in such a language enforces
and which inputs to try. In most cases this approach is not information-flow policies. The annotation effort, how-
effective and considerable program knowledge is needed ever, may be prohibitively expensive in practice. In
to find application-level security errors successfully. addition to explicit information flows our approach ad-
dresses, JFlow also deals with implicit information flows.
7.2 Runtime Monitoring Static analysis has been applied to analyzing SQL
A variety of both free and commercial runtime mon- statements constructed in Java programs that may lead
itoring tools for evaluating Web application security are to SQL injection vulnerabilities [17, 53]. That work an-
available. Proxies intercept HTTP and HTTPS data be- alyzes strings that represent SQL statements to check for
tween the server and the client, so that data, including potential type violations and tautologies. This approach
cookies and form fields, can be examined and modified, assumes that a flow graph representing how string values
and resubmitted to the application [9, 42]. Commercial can propagate through the program has been constructed
application-level firewalls available from NetContinuum, a priori from points-to analysis results. However, since
Imperva, Watchfire, and other companies take this con- accurate pointer information is necessary to construct an
cept further by creating a model of valid interactions be- accurate flow graph, it is unclear whether this technique
tween the user and the application and warning about vi- can achieve the scalability and precision needed to detect
olations of this model. Some application-level firewalls errors in large systems.
are based on signatures that guard against known types
of attacks. The white-listing approach specifies what 8 Conclusions
the valid inputs are; however, maintaining the rules for In this paper we showed how a general class of se-
white-listing is challenging. In contrast, our technique curity errors in Java applications can be formulated as
can prevent security errors before they have a chance to instances of the general tainted object propagation prob-
manifest themselves. lem, which involves finding all sink objects derivable
7.3 Static Analysis Approaches from source objects via a set of given derivation rules.
We developed a precise and scalable analysis for this
A good overview of static analysis approaches applied
problem based on a precise context-sensitive pointer
to security problems is provided in [8]. Simple lexical
alias analysis and introduced extensions to the handling
approaches employed by scanning tools such as ITS4 and
of strings and containers to further improve the preci-
RATS use a set of predefined patterns to identify poten-
sion. Our approach finds all vulnerabilities matching the
tially dangerous areas of a program [56]. While a signif-
specification within the statically analyzed code. Note,
icant improvement on Unix grep, these tools, however,
however, that errors may be missed if the user-provided
have no knowledge of how data propagates throughout
specification is incomplete.
the program and cannot be used to automatically and
We formulated a variety of widespread vulnerabili-
fully solve taint-style problems.
A few projects use path-sensitive analysis to find er- ties including SQL injections, cross-site scripting, HTTP
rors in C and C++ programs [6, 20, 33]. While capa- splitting attacks, and other types of vulnerabilities as
ble of addressing taint-style problems, these tools rely on tainted object propagation problems. Our experimental
an unsound approach to pointers and may therefore miss results showed that our analysis is an effective practical
some errors. The WebSSARI project uses combined un- tool for finding security vulnerabilities. We were able to
sound static and dynamic analysis in the context of ana- find a total of 29 security errors, and all but one of our
lyzing PHP programs [23]. WebSSARI has successfully nine large real-life benchmark applications were vulner-
been applied to find many SQL injection and cross-site able. Two vulnerabilities were located in commonly used
scripting vulnerabilities in PHP code. libraries, thus subjecting applications using the libraries
An analysis approach that uses type qualifiers has to potential vulnerabilities. Most of the security errors
been proven successful in finding security errors in C we reported were confirmed as exploitable vulnerabili-
for the problems of detecting format string violations ties by their maintainers, resulting in more than a dozen
and user/kernel bugs [26, 45]. Context sensitivity sig- code fixes. The analysis reported false positives for only
nificantly reduces the rate of false positives encountered one application. We determined that the false warnings
with this technique; however, it is unclear how scalable reported can be eliminated with improved object naming.
the context-sensitive approach is.
Much of the work in information-flow analysis uses a 9 Acknowledgements
type-checking approach, as exemplified by JFlow [38]. We are grateful to Michael Martin for his help with
The compiler reads a program containing labeled types PQL and dynamic validation of some of the vulnerabili-
and, in checking the types, ensures that the program ties we found and to John Whaley for his support with
cannot contain improper information flow at runtime. the bddbddb tool and the joeq framework. We thank
our paper shepherd R. Sekar, whose insightful comments 119–134, 2004.
[27] A. Klein. Hacking Web applications using cookie poisoning. http://
helped improve this paper considerably. We thank the www.cgisecurity.com/lib/CookiePoisoningByline.pdf,
benchmark application maintainers for responding to our 2002.
[28] A. Klein. Divide and conquer: HTTP response splitting,
bug reports. We thank Amit Klein for providing detailed Web cache poisoning attacks, and related topics. http:
//www.packetstormsecurity.org/papers/general/
clarifications about Web application vulnerabilities and whitepaper httpresponse.pdf, 2004.
Ramesh Chandra, Chris Unkel, and Ted Kremenek and [29] S. Kost. An introduction to SQL injection attacks for Oracle
developers. http://www.net-security.org/dl/articles/
the anonymous paper reviewers for providing additional IntegrigyIntrotoSQLInjectionAttacks.pdf, 2004.
helpful comments. Finally, this material is based upon [30] M. Krax. Mozilla foundation security advisory 2005-38. http://www.
mozilla.org/security/announce/mfsa2005-38.html,
work supported by the National Science Foundation un- 2005.
[31] D. Litchfield. Oracle multiple PL/SQL injection vulnerabilities.
der Grant No. 0326227. http://www.securityfocus.com/archive/1/385333/
2004-12-20/2004-12-26/0, 2003.
[32] D. Litchfield. SQL Server Security. McGraw-Hill Osborne Media, 2003.
References [33] V. B. Livshits and M. S. Lam. Tracking pointers with path and context
sensitivity for bug detection in C programs. In Proceedings of the ACM
[1] C. Anley. Advanced SQL injection in SQL Server applica- SIGSOFT Symposium on the Foundations of Software Engineering, pages
tions. http://www.nextgenss.com/papers/advanced sql 317–326, Sept. 2003.
injection.pdf, 2002. [34] V. B. Livshits and M. S. Lam. Detecting security vulnerabilities in
[2] C. Anley. (more) advanced SQL injection. http://www.nextgenss. Java applications with static analysis. Technical report. Stanford Univer-
com/papers/more advanced sql injection.pdf, 2002. sity. http://suif.stanford.edu/∼livshits/papers/tr/
[3] B. Arkin, S. Stender, and G. McGraw. Software penetration testing. IEEE webappsec tr.pdf, 2005.
Security and Privacy, 3(1):84–87, 2005. [35] M. Martin, V. B. Livshits, and M. S. Lam. Finding application errors using
[4] K. Beaver. Achieving Sarbanes-Oxley compliance for Web applica- PQL: a program query language (to be published). In Proceedings of the
tions through security testing. http://www.spidynamics.com/ ACM Conference on Object-Oriented Programming, Systems, Languages,
support/whitepapers/WI SOXwhitepaper.pdf, 2003. and Applications (OOPSLA), Oct. 2005.
[5] B. Buege, R. Layman, and A. Taylor. Hacking Exposed: J2EE and [36] J. Melbourne and D. Jorm. Penetration testing for Web applications.
Java: Developing Secure Applications with Java Technology. McGraw- http://www.securityfocus.com/infocus/1704, 2003.
Hill/Osborne, 2002. [37] J. S. Miller, S. Ragsdale, and J. Miller. The Common Language Infrastruc-
[6] W. R. Bush, J. D. Pincus, and D. J. Sielaff. A static analyzer for finding ture Annotated Standard. Addison-Wesley Professional, 2003.
dynamic programming errors. Software - Practice and Experience (SPE), [38] A. C. Myers. JFlow: practical mostly-static information flow control. In
30:775–802, 2000. Proceedings of the 26th ACM SIGPLAN-SIGACT Symposium on Principles
[7] CGI Security. The cross-site scripting FAQ. http://www. of Programming Languages, pages 228–241, Jan. 1999.
cgisecurity.net/articles/xss-faq.shtml. [39] NetContinuum, Inc. The 21 primary classes of Web application threats.
[8] B. Chess and G. McGraw. Static analysis for security. IEEE Security and https://www.netcontinuum.com/securityCentral/
Privacy, 2(6):76–79, 2004. TopThreatTypes/index.cfm, 2004.
[9] Chinotec Technologies. Paros—a tool for Web application security assess- [40] Open Web Application Security Project. A guide to building se-
ment. http://www.parosproxy.org, 2004. cure Web applications. http://voxel.dl.sourceforge.net/
[10] Computer Security Institute. Computer crime and security sur- sourceforge/owasp/OWASPGuideV1.1.pdf, 2004.
vey. http://www.gocsi.com/press/20020407.jhtml? [41] Open Web Application Security Project. The ten most critical Web applica-
requestid=195148, 2002. tion security vulnerabilities. http://umn.dl.sourceforge.net/
[11] S. Cook. A Web developers guide to cross-site scripting. http://www. sourceforge/owasp/OWASPTopTen2004.pdf, 2004.
giac.org/practical/GSEC/Steve Cook GSEC.pdf, 2003. [42] Open Web Application Security Project. WebScarab. http://www.
[12] C. Cowan, C. Pu, D. Maier, J. Walpole, P. Bakke, S. Beattie, A. Grier, owasp.org/software/webscarab.html, 2004.
P. Wagle, Q. Zhang, and H. Hinton. StackGuard: Automatic adaptive de- [43] S. Sagiv, T. Reps, and R. Wilhelm. Parametric shape analysis via 3-valued
tection and prevention of buffer-overflow attacks. In Proceedings of the 7th logic. In Proceedings of the 26th ACM Symposium on Principles of Pro-
USENIX Security Conference, pages 63–78, January 1998. gramming Languages, pages 105–118, Jan. 1999.
[13] J. D’Anjou, S. Fairbrother, D. Kehn, J. Kellerman, and P. McCarthy. Java [44] J. Scambray and M. Shema. Web Applications (Hacking Exposed).
Developer’s Guide to Eclipse. Addison-Wesley Professional, 2004. Addison-Wesley Professional, 2002.
[14] S. Friedl. SQL injection attacks by example. http://www.unixwiz. [45] U. Shankar, K. Talwar, J. S. Foster, and D. Wagner. Detecting format string
net/techtips/sql-injection.html, 2004. vulnerabilities with type qualifiers. In Proceedings of the 2001 Usenix Se-
[15] D. Geer and J. Harthorne. Penetration testing: A duet. http://www. curity Conference, pages 201–220, Aug. 2001.
acsac.org/2002/papers/geer.pdf, 2002. [46] K. Spett. Cross-site scripting: are your Web applications vulnerable.
[16] Gentoo Linux Security Advisory. SnipSnap: HTTP response split- http://www.spidynamics.com/support/whitepapers/
ting. http://www.gentoo.org/security/en/glsa/ SPIcross-sitescripting.pdf, 2002.
glsa-200409-23.xml, 2004. [47] K. Spett. SQL injection: Are your Web applications vulnera-
[17] C. Gould, Z. Su, and P. Devanbu. Static checking of dynamically generated ble? http://downloads.securityfocus.com/library/
queries in database applications. In Proceedings of the 26th International SQLInjectionWhitePaper.pdf, 2002.
Conference on Software Engineering, pages 645–654, 2004. [48] B. Steensgaard. Points-to analysis in almost linear time. In Proceedings of
[18] J. Grossman. Cross-site tracing (XST): The new techniques and emerg- the 23th ACM Symposium on Principles of Programming Languages, pages
ing threats to bypass current Web security measures using TRACE 32–41, Jan. 1996.
and XSS. http://www.cgisecurity.com/whitehat-mirror/ [49] M. Surf and A. Shulman. How safe is it out there? http://www.
WhitePaper screen.pdf, 2003. imperva.com/download.asp?id=23, 2004.
[19] J. Grossman. WASC activities and U.S. Web application secu- [50] J. D. Ullman. Principles of Database and Knowledge-Base Systems. Com-
rity trends. http://www.whitehatsec.com/presentations/ puter Science Press, Rockville, Md., volume II edition, 1989.
WASC WASF 1.02.pdf, 2004. [51] D. Wagner, J. Foster, E. Brewer, and A. Aiken. A first step towards auto-
[20] S. Hallem, B. Chelf, Y. Xie, and D. Engler. A system and language for mated detection of buffer overrun vulnerabilities. In Proceedings of Net-
building system-specific, static analyses. In Proceedings of the ACM SIG- work and Distributed Systems Security Symposium, pages 3–17, Feb. 2000.
PLAN 2002 Conference on Programming language Design and Implemen- [52] L. Wall, T. Christiansen, and R. Schwartz. Programming Perl. O’Reilly
tation, pages 69–82, 2002. and Associates, Sebastopol, CA, 1996.
[21] M. Howard and D. LeBlanc. Writing Secure Code. Microsoft Press, 2001. [53] G. Wassermann and Z. Su. An analysis framework for security in Web
[22] D. Hu. Preventing cross-site scripting vulnerability. http://www. applications. In Proceedings of the Specification and Verification of
giac.org/practical/GSEC/Deyu Hu GSEC.pdf, 2004. Component-Based Systems Workshop, Oct. 2004.
[23] Y.-W. Huang, F. Yu, C. Hang, C.-H. Tsai, D.-T. Lee, and S.-Y. Kuo. Se- [54] WebCohort, Inc. Only 10% of Web applications are secured against com-
curing Web application code by static analysis and runtime protection. In mon hacking techniques. http://www.imperva.com/company/
Proceedings of the 13th conference on World Wide Web, pages 40–52, 2004. news/2004-feb-02.html, 2004.
[24] G. Hulme. New software may improve application security. http: [55] J. Whaley and M. S. Lam. Cloning-based context-sensitive pointer alias
//www.informationweek.com/story/IWK20010209S0003, analysis using binary decision diagrams. In Proceedings of the ACM SIG-
2001. PLAN 2004 conference on Programming Language Design and Implemen-
[25] Imperva, Inc. SuperVeda penetration test. http://www.imperva. tation, pages 131–144, June 2004.
com/download.asp?id=3. [56] J. Wilander and M. Kamkar. A comparison of publicly available tools for
[26] R. Johnson and D. Wagner. Finding user/kernel pointer bugs with type static intrusion prevention. In Proceedings of 7th Nordic Workshop on Se-
inference. In Proceedings of the 2004 Usenix Security Conference, pages cure IT Systems, Nov. 2002.