1. Cross site scripting (XSS)The problem: The “most prevalent and pernicious” Web application security vulnerability,  XSS flaws happen when an application sends user data to a Web browser  without first validating or encoding the content. This lets hackers  execute malicious scripts in a browser, letting them hijack user  sessions, deface Web sites, insert hostile content and conduct phishing  and malware attacks.
Attacks are usually executed with JavaScript, letting hackers manipulate any aspect of a page. In a worst-case scenario, a hacker could steal information and impersonate a user on a bank’s Web site.
Real-world example: PayPal was targeted last year when attackers redirected PayPal visitors to a page warning users  their accounts had been compromised. Victims were redirected to a  phishing site and prompted to enter PayPal login information, Social  Security numbers and credit card details.
How to protect users:  Use a whitelist to validate all incoming data, which rejects any data  that’s not specified on the whitelist as being good. This approach is  the opposite of blacklisting, which rejects only inputs known to be bad.  Additionally, use appropriate encoding of all output data. Validation  allows the detection of attacks, and encoding prevents any successful script injection from running in the browser.
2. Injection flawsThe problem: When user-supplied data is sent to interpreters as part of a  command or query, hackers trick the interpreter which interprets  text-based commands into executing unintended commands. Injection flaws  allow attackers to create, read, update, or delete any arbitrary data  available to the application. In the worst-case scenario, these flaws  allow an attacker to completely compromise the application and the  underlying systems, even bypassing deeply nested firewalled  environments.
Real-world example: Russian hackers broke into a Rhode Island government  Web site to steal credit card data in January 2006. Hackers claimed the  SQL injection attack stole 53,000 credit card numbers, while the  hosting service provider claims it was only 4,113.
How to protect users:  Avoid using interpreters if possible. If you must invoke an  interpreter, the key method to avoid injections is the use of safe APIs,  such as strongly typed parameterized queries and object relational  mapping libraries.
3. Malicious file executionThe problem: Hackers can perform remote code execution, remote  installation of rootkits, or completely compromise a system. Any type of  Web application is vulnerable if it accepts filenames or files from  users. The vulnerability may be most common with PHP, a widely used scripting language for Web development.
Real-world example: A teenage programmer discovered in 2002 that  Guess.com was vulnerable to attacks that could steal more than 200,000  customer records from the Guess database,  including names, credit card numbers and expiration dates. Guess agreed  to upgrade its information security the next year after being  investigated by the Federal Trade Commission.
How to protect users: Don’t use input supplied by users in any filename for server  based resources, such as images and script inclusions. Set firewall  rules to prevent new connections to external Web sites and internal  systems.
4. Insecure direct object referenceThe problem: Attackers manipulate direct object references to gain unauthorized access to other objects. It happens when URLs or form parameters contain references to objects such as files, directories, database records or keys.
Banking Web sites commonly use a customer account number as the primary key, and may expose account numbers in the Web interface.
References to database keys are frequently exposed. An attacker can  attack these parameters simply by guessing or searching for another  valid key. Often, these are sequential in nature.
Real-world example: An Australian Taxation  Office site was hacked in 2000 by a user who changed a tax ID present in  a URL to access details on 17,000 companies. The hacker e-mailed the  17,000 businesses to notify them of the security breach.
How to protect users: Use an index, indirect reference map or another  indirect method to avoid exposure of direct object references. If you  can’t avoid direct references, authorize Web site visitors before using  them
5. Cross site request forgeryThe problem simple and devastating this attack takes control of victim’s  browser when it is logged onto a Web site, and sends malicious requests  to the Web application. Web sites are extremely vulnerable, partly  because they tend to authorize requests based on session cookies or  “remember me” functionality. Banks are potential targets.
Ninety-nine percent of the applications on the Internet are susceptible to cross site request forgery.
Real-world example: A hacker known as Samy gained more than a million “friends” on MySpace.com  with a worm in late 2005, automatically including the message “Samy is  my hero” in thousands of MySpace pages. The attack itself may not have  been that harmful, but it was said to demonstrate the power of combining  cross site scripting with cross site request forgery. Another example  that came to light one year ago exposed a Google vulnerability allowing outside sites to change a Google user’s language preferences.
How to protect users: Don’t rely on credentials or tokens automatically  submitted by browsers. The only solution is to use a custom token that  the browser will not ‘remember’.
6. Information leakage and improper error handlingThe problem: Error messages that applications generate and display to  users are useful to hackers when they violate privacy or unintentionally  leak information about the program’s configuration and internal  workings.
Web applications will often leak information about their internal state  through detailed or debug error messages. Often, this information can be  leveraged to launch or even automate more powerful attacks.
Real-world example: Information leakage goes well beyond error handling,  applying also to breaches occurring when confidential data is left in  plain sight. The ChoicePoint debacle in early 2005 thus falls somewhere  in this category. The records of 163,000 consumers were compromised  after criminals pretending to be legitimate ChoicePoint customers sought  details about individuals listed in the company’s database of personal  information. ChoicePoint subsequently limited its sales of information  products containing sensitive data.
How to protect users: Use a testing tool such  as OWASP’S WebScarab Project to see what errors your application  generates. Applications that have not been tested in this way will  almost certainly generate unexpected error output.
7. Broken authentication and session managementThe problem: User and administrative accounts can be hijacked when  applications fail to protect credentials and session tokens from  beginning to end. Watch out for privacy violations and the undermining  of authorization and accountability controls.
Flaws in the main authentication mechanism are not uncommon, but  weaknesses are more often introduced through ancillary authentication  functions such as logout, password management, timeout, remember me,  secret question and account update .
Real-world example: Microsoft had to eliminate a vulnerability in  Hotmail that could have let malicious JavaScript programmers steal user  passwords in 2002. Revealed by a networking products reseller, the flaw  was vulnerable to e-mails containing Trojans that altered the Hotmail  user interface, forcing users to repeatedly reenter their passwords and  unwittingly send them to hackers.
How to protect users: Communication and credential storage has to be  secure. The SSL protocol for transmitting private documents should be  the only option for authenticated parts of the application, and  credentials should be stored in hashed or encrypted form.
Another tip: get rid of custom cookies used for authentication or session management.
8. Insecure cryptographic storageThe problem: Many Web developers fail to encrypt  sensitive data in storage, even though cryptography is a key part of  most Web applications. Even when encryption is present, it’s often  poorly designed, using inappropriate ciphers.
These flaws can lead to disclosure of sensitive data and compliance violations.
Real-world example: The TJX data breach that exposed 45.7 million credit  and debit card numbers. A Canadian government investigation faulted TJX  for failing to upgrade its data encryption system before it was  targeted by electronic eavesdropping starting in July 2005.
How to protect users: Don’t invent your own  cryptographic algorithms. Only use approved public algorithms such as  AES, RSA public key cryptography, and SHA-256 or better for hashing.
Furthermore, generate keys offline, and never transmit private keys over insecure channels.
9. Insecure communicationsThe problem: Similar to No. 8, this is a failure to encrypt network  traffic when it’s necessary to protect sensitive communications.  Attackers can access unprotected conversations, including transmissions  of credentials and sensitive information. For this reason, PCI standards  require encryption of credit card information transmitted over the  Internet.
Real-world example: TJX again. Investigators believe hackers used a telescope-shaped antenna and laptop computer  to steal data exchanged wirelessly between portable price-checking  devices, cash registers and store computers, the Wall Street Journal  reported.
“The $17.4-billion retailer’s wireless network had less security than  many people have on their home networks,” the Journal wrote. TJX was  using the WEP encoding system, rather than the more robust WPA.
How to protect users: Use SSL on any authenticated connection or during  the transmission of sensitive data, such as user credentials, credit  card details, health records and other private information. SSL or a  similar encryption protocol should also be applied to client, partner,  staff and administrative access to online systems. Use transport layer  security or protocol level encryption to protect communications between  parts of your infrastructure, such as Web servers and database systems.
10. Failure to restrict URL accessThe problem: Some Web pages are supposed to  be restricted to a small subset of privileged users, such as  administrators. Yet often there’s no real protection of these pages, and  hackers can find the URLs by making educated guesses.
The attacks targeting this vulnerability are called forced browsing,  which encompasses guessing links and brute force techniques to find  unprotected pages.
Real-world example: A hole on the Macworld Conference & Expo Web  site this year let users get “Platinum” passes worth nearly $1,700 and  special access to a Steve Jobs keynote speech, all for free. The flaw  was code that evaluated privileges on the client but not on the server, letting people grab free passes via JavaScript on the browser, rather than the server.
How to protect users: Don’t assume users will be unaware of hidden URLs.  All URLs and business functions should be protected by an effective  access control mechanism that verifies the user’s role and privileges.  Make sure this is done … every step of the way, not just once towards  the beginning of any multistage process.
Quote this message in a reply