01. Dez. 2025

German OWASP Days 2025 – KI & Security

Am 26.11.2025 fanden der German OWASP Day (GOD) in Düsseldorf statt. Für Accso ist sichere Software-Entwicklung ein wichtiger Teil unserer Arbeit und OWASP damit auch immer präsent. Umso mehr haben wir uns gefreut, diese Veranstaltung als einer der Sponsoren zu unterstützen. Ein Rückblick von Nadine Petzka.
1060 x 710 Petzka Nadine

Autor:in

Nadine Petzka

Der German OWASP Day 2025 war eine verhältnismäßige kleine Konferenz mit 200 Teilnehmenden und 2 Tracks. Die ganze Veranstaltung wird von freiwilligen Helfenden getragen und man merkt, dass diese sich mit Herzblut engagieren. Ein Security Superstar (jedenfalls für mich) war auch dort: Björn Kimminich – der Macher des OWASP Juice Shop, dem besten Saftladen der Welt! Wer den JuiceShop nicht kennt: Es ist eine spielerische Art, um sich mit Security-Konzepten auseinanderzusetzen und sich selbst am Hacken zu probieren.

 

Einblick in die Vorträge auf dem German OWASP Day 2025

Keynote

Wie überall, so auch auf dem GOD, war das Thema KI sehr präsent – allerdings wurde es sehr kritisch hinterfragt. In der Keynote wurde die These aufgestellt, dass sich KI nicht mehr viel weiter entwickeln wird, dafür aber Sicherheitsrisiken, wie System Prompt Extraction und Injection, zu einer Herausforderung werden. Die Keynote könnt ihr euch hier anschauen.

Workshop zu Threat Modeling

Der Workshop beinhaltete eine Einführung in Threat Modeling. Interessant hierbei könnten Eraser.io sein, da hiermit die besten Ergebnisse erzeugt wurden. Im Workshop wurde Eraser.io als VDDaCaaS beschrieben – kurz für Vibe-Debugging-Diagram-as-Code-as-a-Service. Als Tipp wurde hier mitgegeben, Diagramme erstmal zu vibe coden und sie dann händisch bei Draw.io zu verbessern. Dabei kann man auch auf Mermaid Syntax zurückgreifen, sodass die LLMs keine Bilder generieren müssen. Diese Mermaid Syntax ist nämlich mit Draw.io kompatibel. So spart man sich die Zeit des initialen Setups. Allerdings wurde immer wieder betont zu reflektieren, ob man durch die Nutzung der KI wirklich Zeit spart oder ggf. den Prozess verkompliziert. Ich denke dies ist abhängig davon, wie viel Komplexität vorhanden ist. Persönlich hat mir die Idee gefallen, einem LLM in natürlicher Sprache den Aufbau zu erklären und dieses in Mermaid Syntax übersetzen zu lassen – so ist da initiale Setup getan.

Nützliche Tools und Tipps

Für das Notizenmachen wurde OpenAI Whisper (local) empfohlen. Termine sollte man aufnehmen und dann das Audio abstrahieren. Die Qualität der Transkription hängt hierbei von diversen Faktoren ab wie bspw. Audioqualität oder Dialekten. Verschiedenen Sprecher:innen können selten differenziert werden und Whisper kommt momentan noch nicht mit längeren Pausen in Gesprächen klar, halluziniert dann und hängt sich zum Teil komplett auf und schafft es nicht sich wieder zu fangen. Im gezeigten Beispiel halluzinierte die KI dann eine Stunde lang immer das gleiche Wort – warum ist noch unklar. Hier müsste man die Aufnahme so bearbeiten, dass keine langen Sprechpausen enthalten sind. Während sowohl die Transkription als auch das Kreieren von Diagrammen mit KI zwar als noch ausbaufähig beschrieben wurde, so wurde auch gesagt, dass die Hilfe von LLMs bei dem Generieren von Threat Statements und Countermeasures größer sei. Etwas das hier sehr oft unterstrichen wurde ist, dass es als Unternehmen sinnvoll ist seine Prompts untereinander auszutauschen, damit Prompts, die gut funktionieren nicht immer neu erfunden werden müssen und mehr Menschen von dem eigenen Trial- und Error- Prozess profitieren können.

Als Beispiel wurden diese beiden Prompts gegenübergestellt: 

 Ursprünglicher PromptKI-unterstützter Prompt
Threat Statements

The API returns a JSON with all users' data and

relies on the frontend app to filter out any data

that doesn't belong to the currently logged-in

User.

An authenticated malicious user can exploit broken

access control in the backend API, which returns all

users' data without server-side filtering. Because the

single-page applicaEon (SPA) is solely responsible for

client-side filtering, the attacker can bypass this

logic (e.g., via direct API calls) and gain unauthorized

access to other users' personal information,

potentially leading to privacy violations, regulatory

non-compliance (e.g., GDPR), and reputational

damage

Threat Countermeasures

Add redundancy to

protect against DDoS

attacks

Implement a redundant, geo-distributed failover

environment using a secondary system or cloud-

based redundancy, ensuring automatic failover

and load balancing in the event of a cyber

incident or primary system failure.
 

- Configure load balancing using NGINX HA to

route traffic between primary and backup.

- Implement DNS-based failover via Cloudflare
 

Estimated OPEX: 13k-28k

Cloud infrastructure for secondary system + Load

balancing & DDoS protec:on + maintenance

labor ˜5d/y
 

Estimated CAPEX: 5k-10k

Internal or outsourced IT resources ~20d

Wenn man einmal die Arbeit investiert, um generelle Prompts herzustellen, könnte dies ein Weg sein, die Arbeit im Security-Bereich zu verkürzen. Natürlich sollten die Expert:innen immer gegenprüfen, was die KI erstellt, allerdings könnte es das erste Aufsetzen und die Schreibarbeit verkürzen. Um Halluzinationen zu minimieren, wurde noch angeraten der KI aufzutragen, dass sie bei Unklarheiten Fragen stellt. Am Ende des Artikels findet ihr einen Beispielprompt für Diagramme und einen für Threat Modeling.

 

LangSec for AppSec

Im LangSec for AppSec Vortrag wurde immer wieder betont, dass das Schlechteste ist, was man machen kann, eigene Parser zu schreiben. Stattdessen solle man bekannte Parser nutzen. Außerdem wurde gesagt, dass die Bezeichnung Input Validation falsche Sicherheit beherbergt, da nicht nur direkt beim Empfangen, sondern auch beim Rendern des Output Checks stattfinden sollten. 

Den Vortrag findet ihr hier.

 

Hacking eines KI-Agenten

Eine wichtige Lektion des Hacking an AI Agent Vortrags war, dass Entwickler:innen sich immer wieder erinnern sollten, dass ein KI-Agent ein User und keine API ist und man somit cross-user data access umgeht. „Dont just Authenticate – also Authorize“. 

Den Vortrag findet ihr hier.

 

Security von Coding-Assistenten

Auch beim Trust Trap – Security von Coding Assistants wurde die Aussage zu System-Prompts aus der Keynote verstärkt: Man soll immer davon ausgehen, dass User an den System-Prompt kommen werden. Außerdem wurde von direkter und indirekter Prompt Injection gewarnt. Auch vor Slobsquatting wurde gewarnt – hierbei würde der Assistent allerdings Dependencies hinzufügen, die die Angreifer:innen nutzen. Als letztes wurde noch Model Poisoning angesprochen, welches die Gewichtung der Modelle verändert. Eine interessante Erkenntnis: Von den getesteten KI-Modellen haben diese 45% sicheren Code produziert – dabei schnitten neuere Modelle allerdings nicht besser ab als ältere.

 

Die neuen OWASP Top 10

Außerdem wurden die neuen OWASP Top 10 angekündigt und es gab Updates zum OWASP Juice Shop.


Fazit

Allgemein war es eine sehr bereichernde Konferenz, ich konnte mit vielen Menschen sprechen, deren Herzensthema Security ist. Für mich war dabei interessant zu sehen, wie viele einen eher untypischen Lebenslauf hatten – von ehemals Sportmanagement über Personen, die sich selbst Coding beigebracht in den 90er Jahren, bis hin zu ehemaligen Entwickler:innen wirkte die Security-Community sehr breit aufgestellt und ich hab mich sehr wohl gefühlt. Das Thema KI war auch hier sehr präsent, allerdings im Hinblick auf Security.

Falls ihr euch selbst ein paar der Vorträge oder ein paar der Folien anschauen möchtet könnt ihr das hier

Data Flow PromptBeispiel

# Data Flow Diagram Generator (Yourdon-DeMarco Notation)

You are an expert systems analyst specializing in creating Data Flow Diagrams (DFDs) using Yourdon-DeMarco notation. Your task is to analyze a system architecture description and produce a clear, well-organized DFD in Mermaid syntax.

## Yourdon-DeMarco Symbol Mapping to Mermaid

Follow these symbol conventions strictly:

| Element | Yourdon-DeMarco Symbol | Mermaid Syntax |

|---------|------------------------|----------------|

| External Entity / Human Actor | Rectangle | EntityName[Entity Name] |

| Process | Circle | ProcessName((Process Name)) |

| Data Store / Database | Cylinder | DataStoreName[(Data Store Name)] |

| Data Flow | Labeled Arrow (unidirectional) | -->|data description| |

## Rules

1. Unidirectional flows only: Every arrow must flow in one direction. If data flows both ways between two elements, use two separate arrows with distinct labels.

2. Label all data flows: Every arrow must have a label describing the data being transferred. Never use unlabeled arrows.

3. Avoid crossing lines: Organize the diagram to minimize line crossings. Use these strategies:

- Place related elements close together

- Use direction TB (top-bottom) or direction LR (left-right) strategically

- Position data stores between the processes that access them

- Place external entities at the edges of the diagram

4. Naming conventions:

- Process IDs: Use numbered prefixes (P1, P2, P3...)

- Data Store IDs: Use numbered prefixes (D1, D2, D3...)

- External Entity IDs: Use prefixes (E1, E2...)

5. Process naming: Use verb + noun format (e.g., "Validate Order", "Generate Report")

6. Subgraphs: Use subgraphs sparingly to group related processes when it improves clarity.

## Examples

### Example 1: Simple Order Processing System

Input Description:

"A customer places an order through our system. The order is validated, then stored in the orders database. The warehouse receives picking instructions, and the customer gets an order confirmation."

Output:

```mermaid

flowchart LR

E1[Customer]

P1((P1: Validate Order))

P2((P2: Process Order))

D1[(D1: Orders Database)]

E2[Warehouse]

E1 -->|order details| P1

P1 -->|validated order| P2

P2 -->|order record| D1

P2 -->|picking instructions| E2

P2 -->|order confirmation| E1

```

### Example 2: User Authentication System

Input Description:

"Users submit login credentials. The system authenticates against the user database. Successful logins create a session stored in the session store. Failed attempts are logged. Users receive either access tokens or error messages."

Output:

```mermaid

flowchart TB

E1[User]

P1((P1: Receive Credentials))

P2((P2: Authenticate User))

P3((P3: Create Session))

P4((P4: Log Failure))

D1[(D1: User Database)]

D2[(D2: Session Store)]

D3[(D3: Audit Log)]

E1 -->|credentials| P1

P1 -->|login request| P2

P2 -->|user query| D1

D1 -->|user record| P2

P2 -->|authenticated user| P3

P2 -->|failed attempt| P4

P3 -->|session data| D2

P3 -->|access token| E1

P4 -->|failure record| D3

P4 -->|error message| E1

```

### Example 3: E-Commerce Checkout with Payment

Input Description:

"Customer adds items to cart. At checkout, the system calculates totals including tax. Payment is processed through an external payment gateway. Successful payments update inventory and create order records. Customer receives receipt."

Output:

```mermaid

flowchart TB

E1[Customer]

E2[Payment Gateway]

P1((P1: Manage Cart))

P2((P2: Calculate Totals))

P3((P3: Process Payment))

P4((P4: Fulfill Order))

D1[(D1: Product Catalog)]

D2[(D2: Orders)]

D3[(D3: Inventory)]

E1 -->|item selections| P1

P1 -->|product query| D1

D1 -->|product details| P1

P1 -->|cart contents| E1

P1 -->|cart items| P2

P2 -->|order total| P3

P3 -->|payment request| E2

E2 -->|payment result| P3

P3 -->|confirmed order| P4

P4 -->|order record| D2

P4 -->|stock decrease| D3

P4 -->|receipt| E1

```

## Your Task

Analyze the following system architecture and generate a Mermaid DFD:

1. Identify all external entities, processes, and data stores

2. Map all data flows between elements

3. Organize the layout to avoid crossing lines

4. Output valid Mermaid syntax following the conventions above

Provide a brief legend after the diagram listing all elements with their IDs and descriptions.

---

## System Architecture to Analyze:

See attachment.

_________________________________________-

Threat Model PromptBeispiel

# The end user and your job helping them

The end user you are interacting with is an IT security auditor who will give you a design weakness. 

You are here to help them write a good threat statement. 

# Examples of how to write a good threat statement:

- A threat actor can deny service to the API by calling it as many times as possible from a single IP address, which leads to the API being unresponsive to callers, resulting in reduced availability of vehicle registration, vehicle listing, registration status and vehicle registration documents

- A external or internal threat actor who has access to an LLM powered application using compromised upstream open source dependencies can enable exploits through vulnerabilities, resulting in reduced confidentiality, integrity and/or availability of LLM system and connected resources.

- An attacker with access to the network traffic inside of the datacenter can read, manipulate and block the SMTP traffic due to lack of transport encryption, leading to manipulation, delay or deletion of mail notifications 

- A threat actor who can prevent communications between API Gateway deployment and AWS Lambda function can interrupt access, resulting in reduced availability of vehicle registration, vehicle listing, registration status and vehicle registration documents

- A threat actor who can tamper with data in transit between the Amazon S3 bucket and legitimate users can modify that data, resulting in reduced integrity of vehicle registration documents

- A threat actor who is able to influence the behaviour of the AWS Lambda function can take advantage of a potentially over-scoped AWS Lambda execution role, negatively impacting assets within the trust boundary

# Response format

Ask the user relevant questions to generate a good threat statement. Be extra vigilant by asking relevant questions in a numbered list, enabling the end user to respond by referencing these numbers in their answers. End every response with "Do you want me to A) inquire further or B) generate a threat statement". They will provide answers to your numbered questions and end with the letter A or B to let you know what their preferred reaction from you is.

When the end user answers with a "B", Do the following:

- Write the threat statement 

- formulate recommendations as bulletpoint list, every recommendation having a description (what to do to mitigate the threat) as well as two properties of each recommendation: 1) a rough estimate in implementation effort on a three-point T-shirt size scale (S, M, L) and 2) the mitigation power this recommendation will have on a three point scale ("Full mitigation", "Substantial mitigation", "Partial mitigation")