<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE FL_Course SYSTEM "https://www.flane.de/dtd/fl_course095.dtd"><?xml-stylesheet type="text/xsl" href="https://portal.flane.ch/css/xml-course.xsl"?><course productid="24041" language="de" source="https://portal.flane.ch/swisscom/xml-course/cydrill-sect-pywa" lastchanged="2026-01-12T11:35:08+01:00" parent="https://portal.flane.ch/swisscom/xml-courses"><title>Security Testing Python Web Applications</title><productcode>SECT-PYWA</productcode><vendorcode>CY</vendorcode><vendorname>Cydrill</vendorname><fullproductcode>CY-SECT-PYWA</fullproductcode><version>1.0</version><objective>&lt;ul&gt;
&lt;li&gt;Getting familiar with essential cyber security concepts&lt;/li&gt;&lt;li&gt;Understanding Web application security issues&lt;/li&gt;&lt;li&gt;Detailed analysis of the OWASP Top Ten elements&lt;/li&gt;&lt;li&gt;Putting Web application security in the context of Python&lt;/li&gt;&lt;li&gt;Going beyond the low hanging fruits&lt;/li&gt;&lt;li&gt;Understanding security testing methodology and approaches&lt;/li&gt;&lt;li&gt;Getting familiar with common security testing techniques and tools&lt;/li&gt;&lt;li&gt;Managing vulnerabilities in third party components&lt;/li&gt;&lt;li&gt;Identify vulnerabilities and their consequences&lt;/li&gt;&lt;li&gt;Learn the security best practices in Python&lt;/li&gt;&lt;li&gt;Input validation approaches and principles&lt;/li&gt;&lt;/ul&gt;</objective><essentials>&lt;p&gt;General Python and Web development, testing and QA&lt;/p&gt;</essentials><audience>&lt;p&gt;Python developers and testers working on Web applications&lt;/p&gt;</audience><contents>&lt;ul&gt;
&lt;li&gt;Cyber security basics&lt;/li&gt;&lt;li&gt;The OWASP Top Ten&lt;/li&gt;&lt;li&gt;Security testing&lt;/li&gt;&lt;li&gt;Common software security weaknesses&lt;/li&gt;&lt;li&gt;Wrap up&lt;/li&gt;&lt;/ul&gt;</contents><outline>&lt;p&gt;&lt;strong&gt;DAY 1&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Cyber security basics&lt;/strong&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;What is security?&lt;/li&gt;&lt;li&gt;Threat and risk&lt;/li&gt;&lt;li&gt;Cyber security threat types&lt;/li&gt;&lt;li&gt;Consequences of insecure software
&lt;ul&gt;
&lt;li&gt;Constraints and the market&lt;/li&gt;&lt;li&gt;The dark side&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;strong&gt;The OWASP Top Ten&lt;/strong&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;OWASP Top 10 &amp;ndash; 2017&lt;/li&gt;&lt;li&gt;A1 &amp;ndash; Injection
&lt;ul&gt;
&lt;li&gt;Injection principles&lt;/li&gt;&lt;li&gt;Injection attacks&lt;/li&gt;&lt;li&gt;SQL injection
&lt;ul&gt;
&lt;li&gt;SQL injection basics&lt;/li&gt;&lt;li&gt;Lab &amp;ndash; SQL injection&lt;/li&gt;&lt;li&gt;Attack techniques&lt;/li&gt;&lt;li&gt;Content-based blind SQL injection&lt;/li&gt;&lt;li&gt;Time-based blind SQL injection&lt;/li&gt;&lt;li&gt;Case study &amp;ndash; Hacking Fortnite accounts&lt;/li&gt;&lt;li&gt;Testing for SQL injection&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;Code injection
&lt;ul&gt;
&lt;li&gt;Code injection via input()&lt;/li&gt;&lt;li&gt;OS command injection
&lt;ul&gt;
&lt;li&gt;Lab &amp;ndash; Command injection&lt;/li&gt;&lt;li&gt;Case study &amp;ndash; Shellshock&lt;/li&gt;&lt;li&gt;Lab &amp;ndash; Shellshock&lt;/li&gt;&lt;li&gt;Case study &amp;ndash; Command injection via ping&lt;/li&gt;&lt;li&gt;Testing for command injection&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;Script injection
&lt;ul&gt;
&lt;li&gt;Server-side template injection (SSTI)&lt;/li&gt;&lt;li&gt;Lab &amp;ndash; Template injection&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;A2 &amp;ndash; Broken Authentication
&lt;ul&gt;
&lt;li&gt;Authentication basics&lt;/li&gt;&lt;li&gt;Multi-factor authentication&lt;/li&gt;&lt;li&gt;Authentication weaknesses &amp;ndash; spoofing&lt;/li&gt;&lt;li&gt;Spoofing on the Web&lt;/li&gt;&lt;li&gt;Testing for weak authentication&lt;/li&gt;&lt;li&gt;Case study &amp;ndash; PayPal 2FA bypass&lt;/li&gt;&lt;li&gt;User interface best practices&lt;/li&gt;&lt;li&gt;Lab &amp;ndash; On-line password brute forcing&lt;/li&gt;&lt;li&gt;Password management
&lt;ul&gt;
&lt;li&gt;Inbound password management
&lt;ul&gt;
&lt;li&gt;Storing account passwords&lt;/li&gt;&lt;li&gt;Password in transit&lt;/li&gt;&lt;li&gt;Lab &amp;ndash; Is just hashing passwords enough?&lt;/li&gt;&lt;li&gt;Dictionary attacks and brute forcing&lt;/li&gt;&lt;li&gt;Salting&lt;/li&gt;&lt;li&gt;Adaptive hash functions for password storage&lt;/li&gt;&lt;li&gt;Password policy
&lt;ul&gt;
&lt;li&gt;NIST authenticator requirements for memorized secrets&lt;/li&gt;&lt;li&gt;Password length&lt;/li&gt;&lt;li&gt;Password hardening&lt;/li&gt;&lt;li&gt;Using passphrases&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;Case study &amp;ndash; The Ashley Madison data breach
&lt;ul&gt;
&lt;li&gt;The dictionary attack&lt;/li&gt;&lt;li&gt;The ultimate crack&lt;/li&gt;&lt;li&gt;Exploitation and the lessons learned&lt;/li&gt;&lt;li&gt;(Mis)handling None passwords&lt;/li&gt;&lt;li&gt;Testing for password management issues&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;strong&gt;DAY 2 &lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Security testing&lt;/strong&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Security testing vs functional testing&lt;/li&gt;&lt;li&gt;Manual and automated methods&lt;/li&gt;&lt;li&gt;Security testing methodology
&lt;ul&gt;
&lt;li&gt;Security testing &amp;ndash; goals and methodologies&lt;/li&gt;&lt;li&gt;Overview of security testing processes&lt;/li&gt;&lt;li&gt;Identifying and rating assets
&lt;ul&gt;
&lt;li&gt;Preparation&lt;/li&gt;&lt;li&gt;Identifying assets&lt;/li&gt;&lt;li&gt;Identifying the attack surface&lt;/li&gt;&lt;li&gt;Assigning security requirements&lt;/li&gt;&lt;li&gt;Lab &amp;ndash; Identifying and rating assets&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;Threat modeling
&lt;ul&gt;
&lt;li&gt;SDL threat modeling&lt;/li&gt;&lt;li&gt;Mapping STRIDE to DFD&lt;/li&gt;&lt;li&gt;DFD example&lt;/li&gt;&lt;li&gt;Attack trees&lt;/li&gt;&lt;li&gt;Attack tree example&lt;/li&gt;&lt;li&gt;Lab &amp;ndash; Crafting an attack tree&lt;/li&gt;&lt;li&gt;Misuse cases&lt;/li&gt;&lt;li&gt;Misuse case examples&lt;/li&gt;&lt;li&gt;Risk analysis&lt;/li&gt;&lt;li&gt;Lab &amp;ndash; Risk analysis&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;Security testing approaches
&lt;ul&gt;
&lt;li&gt;Reporting, recommendations, and review&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;strong&gt;The OWASP Top Ten&lt;/strong&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A3 &amp;ndash; Sensitive Data Exposure
&lt;ul&gt;
&lt;li&gt;Information exposure&lt;/li&gt;&lt;li&gt;Exposure through extracted data and aggregation&lt;/li&gt;&lt;li&gt;Case study &amp;ndash; Strava data exposure&lt;/li&gt;&lt;li&gt;Error and exception handling principles&lt;/li&gt;&lt;li&gt;Information exposure through error reporting&lt;/li&gt;&lt;li&gt;Information leakage via error pages&lt;/li&gt;&lt;li&gt;Lab &amp;ndash; Flask information leakage&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;A4 &amp;ndash; XML External Entities (XXE)
&lt;ul&gt;
&lt;li&gt;DTD and the entities&lt;/li&gt;&lt;li&gt;Entity expansion&lt;/li&gt;&lt;li&gt;Lab &amp;ndash; Billion laughs attack&lt;/li&gt;&lt;li&gt;External Entity Attack (XXE)
&lt;ul&gt;
&lt;li&gt;File inclusion with external entities&lt;/li&gt;&lt;li&gt;Server-Side Request Forgery with external entities&lt;/li&gt;&lt;li&gt;Lab &amp;ndash; External entity attack&lt;/li&gt;&lt;li&gt;Case study &amp;ndash; XXE vulnerability in SAP Store&lt;/li&gt;&lt;li&gt;Preventing XXE&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;A5 &amp;ndash; Broken Access Control
&lt;ul&gt;
&lt;li&gt;Access control basics&lt;/li&gt;&lt;li&gt;Failure to restrict URL access&lt;/li&gt;&lt;li&gt;Testing for authorization issues&lt;/li&gt;&lt;li&gt;Confused deputy
&lt;ul&gt;
&lt;li&gt;Insecure direct object reference (IDOR)&lt;/li&gt;&lt;li&gt;Lab &amp;ndash; Insecure Direct Object Reference&lt;/li&gt;&lt;li&gt;Authorization bypass through user-controlled keys&lt;/li&gt;&lt;li&gt;Case study &amp;ndash; Authorization bypass on Facebook&lt;/li&gt;&lt;li&gt;Lab &amp;ndash; Horizontal authorization&lt;/li&gt;&lt;li&gt;Testing for confused deputy weaknesses&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;File upload
&lt;ul&gt;
&lt;li&gt;Unrestricted file upload&lt;/li&gt;&lt;li&gt;Good practices&lt;/li&gt;&lt;li&gt;Lab &amp;ndash; Unrestricted file upload&lt;/li&gt;&lt;li&gt;Testing for file upload vulnerabilities&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;A6 &amp;ndash; Security Misconfiguration
&lt;ul&gt;
&lt;li&gt;Configuration principles&lt;/li&gt;&lt;li&gt;Configuration management&lt;/li&gt;&lt;li&gt;Python configuration best practices
&lt;ul&gt;
&lt;li&gt;Configuring Flask&lt;/li&gt;&lt;li&gt;Testing for misconfiguration issues&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;A7 &amp;ndash; Cross-site Scripting (XSS)
&lt;ul&gt;
&lt;li&gt;Cross-site scripting basics&lt;/li&gt;&lt;li&gt;Cross-site scripting types
&lt;ul&gt;
&lt;li&gt;Persistent cross-site scripting&lt;/li&gt;&lt;li&gt;Reflected cross-site scripting&lt;/li&gt;&lt;li&gt;Client-side (DOM-based) cross-site scripting&lt;/li&gt;&lt;li&gt;Lab &amp;ndash; Stored XSS&lt;/li&gt;&lt;li&gt;Lab &amp;ndash; Reflected XSS&lt;/li&gt;&lt;li&gt;Case study &amp;ndash; XSS in Fortnite accounts&lt;/li&gt;&lt;li&gt;Additional protection layers&lt;/li&gt;&lt;li&gt;Testing for XSS&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;strong&gt;DAY 3&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The OWASP Top Ten&lt;/strong&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A8 &amp;ndash; Insecure Deserialization
&lt;ul&gt;
&lt;li&gt;Serialization and deserialization challenges&lt;/li&gt;&lt;li&gt;Deserializing untrusted streams&lt;/li&gt;&lt;li&gt;Deserialization with pickle&lt;/li&gt;&lt;li&gt;Lab &amp;ndash; Deserializing with Pickle&lt;/li&gt;&lt;li&gt;PyYAML deserialization challenges&lt;/li&gt;&lt;li&gt;Testing for insecure deserialization&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;A9 &amp;ndash; Using Components with Known Vulnerabilities
&lt;ul&gt;
&lt;li&gt;Using vulnerable components&lt;/li&gt;&lt;li&gt;Assessing the environment&lt;/li&gt;&lt;li&gt;Hardening&lt;/li&gt;&lt;li&gt;Untrusted functionality import&lt;/li&gt;&lt;li&gt;Malicious packages in Python&lt;/li&gt;&lt;li&gt;Importing JavaScript&lt;/li&gt;&lt;li&gt;Lab &amp;ndash; Importing JavaScript&lt;/li&gt;&lt;li&gt;Case study &amp;ndash; The British Airways data breach&lt;/li&gt;&lt;li&gt;Vulnerability management
&lt;ul&gt;
&lt;li&gt;Patch management&lt;/li&gt;&lt;li&gt;Bug bounty programs&lt;/li&gt;&lt;li&gt;Vulnerability databases&lt;/li&gt;&lt;li&gt;Vulnerability rating &amp;ndash; CVSS&lt;/li&gt;&lt;li&gt;DevOps, the build process and CI / CD&lt;/li&gt;&lt;li&gt;Dependency checking in Python&lt;/li&gt;&lt;li&gt;Lab &amp;ndash; Detecting vulnerable components&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;A10 &amp;ndash; Insufficient Logging &amp;amp; Monitoring
&lt;ul&gt;
&lt;li&gt;Logging and monitoring principles&lt;/li&gt;&lt;li&gt;Insufficient logging&lt;/li&gt;&lt;li&gt;Plaintext passwords at Facebook&lt;/li&gt;&lt;li&gt;Firewalls and Web Application Firewalls (WAF)&lt;/li&gt;&lt;li&gt;Intrusion detection and prevention&lt;/li&gt;&lt;li&gt;Case study &amp;ndash; The Marriott Starwood data breach&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;Web application security beyond the Top Ten
&lt;ul&gt;
&lt;li&gt;Client-side security&lt;/li&gt;&lt;li&gt;Lab &amp;ndash; Client-side security&lt;/li&gt;&lt;li&gt;Tabnabbing&lt;/li&gt;&lt;li&gt;Lab &amp;ndash; Reverse tabnabbing&lt;/li&gt;&lt;li&gt;Frame sandboxing
&lt;ul&gt;
&lt;li&gt;Cross-Frame Scripting (XFS) attack&lt;/li&gt;&lt;li&gt;Lab &amp;ndash; Clickjacking&lt;/li&gt;&lt;li&gt;Clickjacking beyond hijacking a click&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;Some further best practices
&lt;ul&gt;
&lt;li&gt;HTML5 security best practices&lt;/li&gt;&lt;li&gt;CSS security best practices&lt;/li&gt;&lt;li&gt;Ajax security best practices&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;strong&gt;Security testing&lt;/strong&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Security testing techniques and tools
&lt;ul&gt;
&lt;li&gt;Code analysis
&lt;ul&gt;
&lt;li&gt;Security aspects of code review&lt;/li&gt;&lt;li&gt;Static Application Security Testing (SAST)&lt;/li&gt;&lt;li&gt;Lab &amp;ndash; Using static analysis tools&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;Dynamic analysis
&lt;ul&gt;
&lt;li&gt;Security testing at runtime&lt;/li&gt;&lt;li&gt;Penetration testing&lt;/li&gt;&lt;li&gt;Stress testing&lt;/li&gt;&lt;li&gt;Dynamic analysis tools
&lt;ul&gt;
&lt;li&gt;Dynamic Application Security Testing (DAST)&lt;/li&gt;&lt;li&gt;Web vulnerability scanners&lt;/li&gt;&lt;li&gt;Lab &amp;ndash; Using web vulnerability scanners&lt;/li&gt;&lt;li&gt;SQL injection tools&lt;/li&gt;&lt;li&gt;Lab &amp;ndash; Using SQL injection tools&lt;/li&gt;&lt;li&gt;Proxy servers&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;Fuzzing&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;strong&gt;Common software security weaknesses&lt;/strong&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Input validation
&lt;ul&gt;
&lt;li&gt;Input validation principles
&lt;ul&gt;
&lt;li&gt;Lab &amp;ndash; Input validation&lt;/li&gt;&lt;li&gt;Encoding challenges&lt;/li&gt;&lt;li&gt;Lab &amp;ndash; Encoding challenges&lt;/li&gt;&lt;li&gt;Validation with regex&lt;/li&gt;&lt;li&gt;Regular expression denial of service (ReDoS)&lt;/li&gt;&lt;li&gt;Lab &amp;ndash; Regular expression denial of service (ReDoS)&lt;/li&gt;&lt;li&gt;Dealing with ReDoS&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;Files and streams
&lt;ul&gt;
&lt;li&gt;Path traversal&lt;/li&gt;&lt;li&gt;Path traversal-related examples&lt;/li&gt;&lt;li&gt;Lab &amp;ndash; Path traversal&lt;/li&gt;&lt;li&gt;Additional challenges in Windows&lt;/li&gt;&lt;li&gt;Path traversal best practices&lt;/li&gt;&lt;li&gt;Testing for path traversal&lt;/li&gt;&lt;li&gt;Format string issues&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;Unsafe native code
&lt;ul&gt;
&lt;li&gt;Native code dependence&lt;/li&gt;&lt;li&gt;Lab &amp;ndash; Unsafe native code&lt;/li&gt;&lt;li&gt;Best practices for dealing with native code&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;strong&gt;Wrap up&lt;/strong&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;And now what?
&lt;ul&gt;
&lt;li&gt;Software security sources and further reading&lt;/li&gt;&lt;li&gt;Python resources&lt;/li&gt;&lt;li&gt;Security testing resources&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;</outline><objective_plain>- Getting familiar with essential cyber security concepts
- Understanding Web application security issues
- Detailed analysis of the OWASP Top Ten elements
- Putting Web application security in the context of Python
- Going beyond the low hanging fruits
- Understanding security testing methodology and approaches
- Getting familiar with common security testing techniques and tools
- Managing vulnerabilities in third party components
- Identify vulnerabilities and their consequences
- Learn the security best practices in Python
- Input validation approaches and principles</objective_plain><essentials_plain>General Python and Web development, testing and QA</essentials_plain><audience_plain>Python developers and testers working on Web applications</audience_plain><contents_plain>- Cyber security basics
- The OWASP Top Ten
- Security testing
- Common software security weaknesses
- Wrap up</contents_plain><outline_plain>DAY 1

Cyber security basics



- What is security?
- Threat and risk
- Cyber security threat types
- Consequences of insecure software

- Constraints and the market
- The dark side
The OWASP Top Ten



- OWASP Top 10 – 2017
- A1 – Injection

- Injection principles
- Injection attacks
- SQL injection

- SQL injection basics
- Lab – SQL injection
- Attack techniques
- Content-based blind SQL injection
- Time-based blind SQL injection
- Case study – Hacking Fortnite accounts
- Testing for SQL injection
- Code injection

- Code injection via input()
- OS command injection

- Lab – Command injection
- Case study – Shellshock
- Lab – Shellshock
- Case study – Command injection via ping
- Testing for command injection
- Script injection

- Server-side template injection (SSTI)
- Lab – Template injection
- A2 – Broken Authentication

- Authentication basics
- Multi-factor authentication
- Authentication weaknesses – spoofing
- Spoofing on the Web
- Testing for weak authentication
- Case study – PayPal 2FA bypass
- User interface best practices
- Lab – On-line password brute forcing
- Password management

- Inbound password management

- Storing account passwords
- Password in transit
- Lab – Is just hashing passwords enough?
- Dictionary attacks and brute forcing
- Salting
- Adaptive hash functions for password storage
- Password policy

- NIST authenticator requirements for memorized secrets
- Password length
- Password hardening
- Using passphrases
- Case study – The Ashley Madison data breach

- The dictionary attack
- The ultimate crack
- Exploitation and the lessons learned
- (Mis)handling None passwords
- Testing for password management issues
DAY 2 

Security testing



- Security testing vs functional testing
- Manual and automated methods
- Security testing methodology

- Security testing – goals and methodologies
- Overview of security testing processes
- Identifying and rating assets

- Preparation
- Identifying assets
- Identifying the attack surface
- Assigning security requirements
- Lab – Identifying and rating assets
- Threat modeling

- SDL threat modeling
- Mapping STRIDE to DFD
- DFD example
- Attack trees
- Attack tree example
- Lab – Crafting an attack tree
- Misuse cases
- Misuse case examples
- Risk analysis
- Lab – Risk analysis
- Security testing approaches

- Reporting, recommendations, and review
The OWASP Top Ten



- A3 – Sensitive Data Exposure

- Information exposure
- Exposure through extracted data and aggregation
- Case study – Strava data exposure
- Error and exception handling principles
- Information exposure through error reporting
- Information leakage via error pages
- Lab – Flask information leakage
- A4 – XML External Entities (XXE)

- DTD and the entities
- Entity expansion
- Lab – Billion laughs attack
- External Entity Attack (XXE)

- File inclusion with external entities
- Server-Side Request Forgery with external entities
- Lab – External entity attack
- Case study – XXE vulnerability in SAP Store
- Preventing XXE
- A5 – Broken Access Control

- Access control basics
- Failure to restrict URL access
- Testing for authorization issues
- Confused deputy

- Insecure direct object reference (IDOR)
- Lab – Insecure Direct Object Reference
- Authorization bypass through user-controlled keys
- Case study – Authorization bypass on Facebook
- Lab – Horizontal authorization
- Testing for confused deputy weaknesses
- File upload

- Unrestricted file upload
- Good practices
- Lab – Unrestricted file upload
- Testing for file upload vulnerabilities
- A6 – Security Misconfiguration

- Configuration principles
- Configuration management
- Python configuration best practices

- Configuring Flask
- Testing for misconfiguration issues
- A7 – Cross-site Scripting (XSS)

- Cross-site scripting basics
- Cross-site scripting types

- Persistent cross-site scripting
- Reflected cross-site scripting
- Client-side (DOM-based) cross-site scripting
- Lab – Stored XSS
- Lab – Reflected XSS
- Case study – XSS in Fortnite accounts
- Additional protection layers
- Testing for XSS
DAY 3

The OWASP Top Ten



- A8 – Insecure Deserialization

- Serialization and deserialization challenges
- Deserializing untrusted streams
- Deserialization with pickle
- Lab – Deserializing with Pickle
- PyYAML deserialization challenges
- Testing for insecure deserialization
- A9 – Using Components with Known Vulnerabilities

- Using vulnerable components
- Assessing the environment
- Hardening
- Untrusted functionality import
- Malicious packages in Python
- Importing JavaScript
- Lab – Importing JavaScript
- Case study – The British Airways data breach
- Vulnerability management

- Patch management
- Bug bounty programs
- Vulnerability databases
- Vulnerability rating – CVSS
- DevOps, the build process and CI / CD
- Dependency checking in Python
- Lab – Detecting vulnerable components
- A10 – Insufficient Logging &amp; Monitoring

- Logging and monitoring principles
- Insufficient logging
- Plaintext passwords at Facebook
- Firewalls and Web Application Firewalls (WAF)
- Intrusion detection and prevention
- Case study – The Marriott Starwood data breach
- Web application security beyond the Top Ten

- Client-side security
- Lab – Client-side security
- Tabnabbing
- Lab – Reverse tabnabbing
- Frame sandboxing

- Cross-Frame Scripting (XFS) attack
- Lab – Clickjacking
- Clickjacking beyond hijacking a click
- Some further best practices

- HTML5 security best practices
- CSS security best practices
- Ajax security best practices
Security testing



- Security testing techniques and tools

- Code analysis

- Security aspects of code review
- Static Application Security Testing (SAST)
- Lab – Using static analysis tools
- Dynamic analysis

- Security testing at runtime
- Penetration testing
- Stress testing
- Dynamic analysis tools

- Dynamic Application Security Testing (DAST)
- Web vulnerability scanners
- Lab – Using web vulnerability scanners
- SQL injection tools
- Lab – Using SQL injection tools
- Proxy servers
- Fuzzing
Common software security weaknesses



- Input validation

- Input validation principles

- Lab – Input validation
- Encoding challenges
- Lab – Encoding challenges
- Validation with regex
- Regular expression denial of service (ReDoS)
- Lab – Regular expression denial of service (ReDoS)
- Dealing with ReDoS
- Files and streams

- Path traversal
- Path traversal-related examples
- Lab – Path traversal
- Additional challenges in Windows
- Path traversal best practices
- Testing for path traversal
- Format string issues
- Unsafe native code

- Native code dependence
- Lab – Unsafe native code
- Best practices for dealing with native code
Wrap up



- And now what?

- Software security sources and further reading
- Python resources
- Security testing resources</outline_plain><duration unit="d" days="3">3 Tage</duration><pricelist><price country="SI" currency="EUR">2250.00</price><price country="DE" currency="EUR">2250.00</price><price country="AT" currency="EUR">2250.00</price><price country="GB" currency="EUR">2250.00</price><price country="IT" currency="EUR">2250.00</price><price country="NL" currency="EUR">2250.00</price><price country="BE" currency="EUR">2250.00</price><price country="FR" currency="EUR">2250.00</price><price country="MK" currency="EUR">2250.00</price><price country="GR" currency="EUR">2250.00</price><price country="HU" currency="EUR">2250.00</price></pricelist><miles/></course>