├── .github ├── ISSUE_TEMPLATE │ └── request.md ├── dependabot.yaml ├── funding.yaml ├── pull_request_template.md └── workflows │ ├── ci.yaml │ └── housekeeping.yaml ├── .gitignore ├── .lycheeignore ├── .markdownlint.yaml ├── .spellcheck.yaml ├── .wordlist.txt ├── 404.html ├── Gemfile ├── README.md ├── _config.yml ├── _data ├── docs-1.yaml └── docs-2.yaml ├── _includes ├── banner.html ├── breadcrumb.html └── navigation.html ├── _layouts └── redirected.html ├── assets ├── images │ ├── cupcake-256x256.png │ └── itx-logo.png └── schemas │ ├── owasp.threat-dragon.schema.V1.json │ ├── owasp.threat-dragon.schema.V2.json │ └── threat.model.format.schema.json ├── code_of_conduct.md ├── contributing.md ├── docs-1 ├── about.md ├── api.md ├── cli.md ├── contributing.md ├── credits.md ├── downloads.md ├── getting-started.md ├── info.md ├── install │ ├── info.md │ ├── install-desktop.md │ ├── install-webapp.md │ ├── install.md │ └── setup-env.md ├── introduction.md ├── threat-generation.md ├── threat-model-diagrams.md └── toc.md ├── docs-2 ├── about.md ├── credits.md ├── development │ ├── api.md │ ├── contributing.md │ ├── environment.md │ ├── info.md │ ├── internationalization.md │ ├── local-development.md │ ├── schema.md │ └── testing │ │ ├── actions.md │ │ ├── adhoc.md │ │ ├── e2e.md │ │ ├── info.md │ │ └── unit.md ├── info.md ├── introduction.md ├── toc.md ├── trust │ ├── container.md │ ├── dast.md │ ├── dependencies.md │ ├── incidents.md │ ├── info.md │ └── sast.md └── usage │ ├── config │ ├── bitbucket.md │ ├── environment.md │ ├── github.md │ ├── gitlab.md │ ├── google.md │ ├── info.md │ └── local.md │ ├── info.md │ ├── install │ ├── desktop.md │ ├── docker.md │ ├── info.md │ ├── installation.md │ └── web.md │ └── modeling │ ├── diagrams.md │ ├── getting-started.md │ ├── info.md │ ├── threat-categories.md │ └── threats.md ├── index.md ├── info.md ├── leaders.md ├── license.txt ├── security.md ├── tab_faqs.md ├── tab_releases.md ├── tab_roadmap.md └── tab_tmf.md /.github/ISSUE_TEMPLATE/request.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Change request 3 | about: Suggest a change for this project 4 | title: '' 5 | labels: 'enhancement' 6 | assignees: '' 7 | 8 | --- 9 | 10 | **Describe what change you would like**: 11 | 12 | 13 | **Context**: 14 | 15 | -------------------------------------------------------------------------------- /.github/dependabot.yaml: -------------------------------------------------------------------------------- 1 | version: 2 2 | updates: 3 | - package-ecosystem: "github-actions" 4 | directory: ".github/workflows" 5 | schedule: 6 | interval: "monthly" 7 | ignore: 8 | # ignore all (non-security) patch updates 9 | - dependency-name: "*" 10 | update-types: ["version-update:semver-patch"] 11 | groups: 12 | update-version: 13 | applies-to: version-updates 14 | patterns: 15 | - "*" 16 | update-types: 17 | - "minor" 18 | update-security: 19 | applies-to: security-updates 20 | patterns: 21 | - "*" 22 | update-types: 23 | - "patch" 24 | - "minor" 25 | -------------------------------------------------------------------------------- /.github/funding.yaml: -------------------------------------------------------------------------------- 1 | custom: https://owasp.org/donate/?reponame=www-project-threat-dragon&title=OWASP+Threat+Dragon 2 | github: OWASP 3 | -------------------------------------------------------------------------------- /.github/pull_request_template.md: -------------------------------------------------------------------------------- 1 | **Summary**: 2 | 6 | 7 | **Description for the changelog**: 8 | 11 | 12 | **Other info**: 13 | 17 | 18 | Thanks for submitting a pull request! 19 | Please make sure you follow our code_of_conduct.md and our contributing guidelines contributing.md 20 | -------------------------------------------------------------------------------- /.github/workflows/ci.yaml: -------------------------------------------------------------------------------- 1 | name: CI pipeline 2 | on: 3 | push: 4 | branches: 5 | - main 6 | pull_request: 7 | branches: 8 | - main 9 | workflow_dispatch: 10 | 11 | # for security reasons the github actions are pinned to specific release versions 12 | jobs: 13 | link_checker: 14 | name: Link checker 15 | runs-on: ubuntu-24.04 16 | 17 | steps: 18 | - name: Checkout markdown 19 | uses: actions/checkout@v4.2.0 20 | 21 | - name: Link Checker 22 | uses: lycheeverse/lychee-action@v2.4.0 23 | with: 24 | # skip the jekyll files 25 | args: --verbose --no-progress --max-retries 1 --exclude-path './_includes/*.html' '**/*.md' '*.md' 26 | fail: true 27 | env: 28 | GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}} 29 | 30 | md_linter: 31 | name: Lint markdown 32 | runs-on: ubuntu-24.04 33 | steps: 34 | - name: Checkout markdown 35 | uses: actions/checkout@v4.2.0 36 | 37 | - name: Lint markdown 38 | uses: DavidAnson/markdownlint-cli2-action@v19.1.0 39 | with: 40 | config: '.markdownlint.yaml' 41 | globs: '**/*.md' 42 | 43 | spell_checker: 44 | name: Check spelling 45 | runs-on: ubuntu-24.04 46 | steps: 47 | - name: Checkout markdown 48 | uses: actions/checkout@v4.2.0 49 | 50 | - name: spell_checker 51 | uses: rojopolis/spellcheck-github-actions@0.49.0 52 | -------------------------------------------------------------------------------- /.github/workflows/housekeeping.yaml: -------------------------------------------------------------------------------- 1 | name: Housekeeping 2 | on: 3 | # Run daily at 7:00 4 | schedule: 5 | - cron: '0 7 * * *' 6 | workflow_dispatch: 7 | 8 | # for security reasons the github actions are pinned to specific release versions 9 | jobs: 10 | workflow_cleaner: 11 | name: Tidy workflows 12 | runs-on: ubuntu-24.04 13 | permissions: 14 | actions: write 15 | 16 | steps: 17 | - name: Delete stale workflow runs 18 | uses: Mattraks/delete-workflow-runs@v2.0.6 19 | with: 20 | token: ${{ github.token }} 21 | repository: ${{ github.repository }} 22 | retain_days: 28 23 | keep_minimum_runs: 10 24 | 25 | - name: Delete unused workflows 26 | uses: otto-de/purge-deprecated-workflow-runs@v3.0.1 27 | with: 28 | token: ${{ github.token }} 29 | 30 | link_checker: 31 | name: Link checker 32 | runs-on: ubuntu-24.04 33 | 34 | steps: 35 | - name: Checkout markdown 36 | uses: actions/checkout@v4.2.0 37 | 38 | - name: Link Checker 39 | uses: lycheeverse/lychee-action@v2.4.0 40 | with: 41 | # skip the jekyll files 42 | args: --verbose --no-progress --max-retries 1 --exclude-path './_includes/*.html' '**/*.md' '*.md' 43 | fail: true 44 | env: 45 | GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}} 46 | 47 | stale: 48 | name: Tidy pull requests 49 | runs-on: ubuntu-24.04 50 | permissions: 51 | pull-requests: write 52 | issues: write 53 | 54 | steps: 55 | - name: Tidy stale PRs and issues 56 | uses: actions/stale@v9 57 | with: 58 | days-before-issue-stale: 183 59 | days-before-issue-close: -1 60 | stale-issue-message: 'This issue is stale because it has been open for 6 months with no activity.' 61 | stale-issue-label: stale 62 | remove-issue-stale-when-updated: true 63 | days-before-pr-stale: 42 64 | days-before-pr-close: 7 65 | stale-pr-message: 'This PR is stale because it has been open 42 days with no activity. Remove stale label, or add a comment, otherwise it will be closed in 7 days.' 66 | close-pr-message: 'This PR was closed because it has been stalled for 8 weeks with no activity.' 67 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # uses allow-list, so ignore everything not explicitly allowed 2 | * 3 | 4 | # allow github, workflows and templates 5 | !.github/ 6 | !.github/*.yaml 7 | !.github/issue_template/ 8 | !.github/issue_template/*.md 9 | !.github/workflows/ 10 | !.github/workflows/*.yaml 11 | !.gitignore 12 | !.lycheeignore 13 | !.markdownlint.yaml 14 | !.spellcheck.yaml 15 | !.wordlist.txt 16 | 17 | # allow markdown and the assets 18 | !*.md 19 | !license.txt 20 | !assets/ 21 | !assets/images/ 22 | !assets/images/*.png 23 | !assets/schemas/ 24 | !assets/schemas/*.json 25 | 26 | # allow jekyll build files 27 | !404.html 28 | !Gemfile 29 | !_config.yml 30 | 31 | # allow docs files 32 | !_data 33 | !_data/*.yaml 34 | !_layouts 35 | !_layouts/*.html 36 | !_includes 37 | !_includes/*.html 38 | !docs-1/ 39 | !docs-1/install/ 40 | !docs-1/**/*.md 41 | !docs-2/ 42 | !docs-2/development/ 43 | !docs-2/development/testing/ 44 | !docs-2/trust/ 45 | !docs-2/usage/ 46 | !docs-2/usage/config/ 47 | !docs-2/usage/install/ 48 | !docs-2/usage/modeling/ 49 | !docs-2/**/*.md 50 | 51 | -------------------------------------------------------------------------------- /.lycheeignore: -------------------------------------------------------------------------------- 1 | # ignore these false positives from the link checker housekeeper 2 | 3 | # added by OWASP jekyl page builder, so no control over them: 4 | https://groups.google.com/a/owasp.com/ 5 | 6 | # links referred to in documentation, not intended as actual links 7 | http://localhost 8 | http://127.0.0.1 9 | 10 | # incorrectly get 'Network error: Forbidden' 11 | https://www.deviantart.com 12 | 13 | # Too many redirects: error following redirect for docker tags 14 | https://hub.docker.com/repository/docker/threatdragon/owasp-threat-dragon/tags 15 | -------------------------------------------------------------------------------- /.markdownlint.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | no-trailing-punctuation: false 3 | no-inline-html: false 4 | first-line-heading: false 5 | link-fragments: false 6 | 7 | # MD013 - Line length 8 | MD013: 9 | code_block_line_length: 125 10 | code_blocks: true 11 | heading_line_length: 80 12 | headings: true 13 | line_length: 125 14 | stern: true 15 | strict: false 16 | tables: false 17 | 18 | -------------------------------------------------------------------------------- /.spellcheck.yaml: -------------------------------------------------------------------------------- 1 | matrix: 2 | - name: Markdown 3 | aspell: 4 | lang: en 5 | dictionary: 6 | wordlists: 7 | - .wordlist.txt 8 | output: wordlist.dic 9 | encoding: utf-8 10 | pipeline: 11 | - pyspelling.filters.markdown: 12 | - pyspelling.filters.html: 13 | comments: false 14 | ignores: 15 | - code 16 | - pre 17 | sources: 18 | - '**/*.md' 19 | default_encoding: utf-8 20 | 21 | -------------------------------------------------------------------------------- /.wordlist.txt: -------------------------------------------------------------------------------- 1 | AIX 2 | APIs 3 | AdHoc 4 | AntV 5 | AppImage 6 | Atlassian 7 | Bahasa 8 | BaseURL 9 | BitBucket 10 | Bitbucket 11 | Bohy 12 | BrowserStack 13 | CLI 14 | CN 15 | CVE 16 | CVEs 17 | CVSS 18 | CentOS 19 | CodeQL 20 | DAST 21 | Dependabot 22 | Detectability 23 | Deutsch 24 | DoS 25 | DockerHub 26 | DotEnv 27 | Dotenv 28 | ENV 29 | ESLint 30 | El 31 | FI 32 | FQDN 33 | Faqs 34 | Gamification 35 | GitLab 36 | ITMJ 37 | Identifiability 38 | Installable 39 | JSON 40 | JWT 41 | JWTs 42 | Jira 43 | JointJS 44 | LINDDUN 45 | LTS 46 | Libre 47 | Linkability 48 | MacOS 49 | MochaJS 50 | Moneypenny 51 | NSIS 52 | OAuth 53 | OSX 54 | OTM 55 | OWASP 56 | OneDrive 57 | OpenDocument 58 | PLOT4ai 59 | PNG 60 | PRs 61 | PWD 62 | Pythonic 63 | Quickstart 64 | Roadmap 65 | SAST 66 | SCA 67 | SVG 68 | SY 69 | SeaSponge 70 | Sinon 71 | Styran 72 | Suomi 73 | TBD 74 | TD's 75 | TLS 76 | TMF 77 | TMT 78 | TSV 79 | Threagile 80 | ThreatDragonModels 81 | Trisqel 82 | Trivy 83 | UI 84 | URI 85 | URL 86 | URLEncoded 87 | Utils 88 | Validator 89 | Vue 90 | WDIO 91 | adhoc 92 | ai 93 | ajv 94 | amd 95 | antv 96 | api 97 | ara 98 | auth 99 | backend 100 | bitbucket 101 | boolean 102 | browserstack 103 | bunyan 104 | chai 105 | ci 106 | cli 107 | config 108 | configs 109 | cron 110 | dast 111 | dataflow 112 | debian 113 | decrypting 114 | deu 115 | dev 116 | diagramJson 117 | diagramType 118 | displaytext 119 | dmg 120 | dockerfile 121 | dockerhub 122 | dotenv 123 | dotenv 124 | drawio 125 | dropdown 126 | eg 127 | eng 128 | env 129 | español 130 | exe 131 | filesystem 132 | fra 133 | français 134 | frontend 135 | github 136 | githubusercontent 137 | gitlab 138 | gridlines 139 | hin 140 | hoc 141 | hostname 142 | html 143 | http 144 | https 145 | ind 146 | ini 147 | installable 148 | io 149 | javascript 150 | jpg 151 | jpn 152 | js 153 | json 154 | jwt 155 | kubernetes 156 | lifecycle 157 | linux 158 | localhost 159 | misconfigurations 160 | misconfigurations 161 | mitigations 162 | mr 163 | node.js 164 | npm 165 | nvm 166 | openssl 167 | orchestrator 168 | owasp 169 | pdf 170 | permalink 171 | pipleines 172 | pnpm 173 | por 174 | português 175 | postfix 176 | pythonic 177 | pytm 178 | remediations 179 | renderer 180 | repo 181 | repos 182 | roadmap 183 | sast 184 | sexualized 185 | snapcraft 186 | socio 187 | sudo 188 | tdVersion 189 | threatdragon 190 | transpiled 191 | trivy 192 | unpatched 193 | unselected 194 | uptime 195 | url 196 | vue 197 | webapp 198 | webpack 199 | www 200 | yargs 201 | zho 202 | -------------------------------------------------------------------------------- /404.html: -------------------------------------------------------------------------------- 1 | --- 2 | 3 | title: 404 - Not Found 4 | layout: col-generic 5 | 6 | --- 7 | 8 |
9 |

10 |

WHOA THAT PAGE CANNOT BE FOUND

11 |

Try the SEARCH function in the main navigation to find something. 12 | If you are looking for chapter information, please see Chapters for the correct chapter. 13 | For information about OWASP projects see Projects. 14 | For common attacks, vulnerabilities, or information about other community-led contributions see Contributed Content.

15 | 16 |
17 |

If all else fails you can search our historical site.

18 |
19 | -------------------------------------------------------------------------------- /Gemfile: -------------------------------------------------------------------------------- 1 | source 'https://rubygems.org' 2 | group :jekyll_plugins do 3 | gem "github-pages" 4 | end -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |

2 | Threat Dragon Logo 4 |

5 | 6 | [![Build status](https://github.com/OWASP/www-project-threat-dragon/actions/workflows/ci.yaml/badge.svg?event=push)][build] 7 | [![GitHub license](https://img.shields.io/github/license/owasp/www-project-threat-dragon.svg)](license.txt) 8 | [![OWASP Lab](https://img.shields.io/badge/owasp-lab%20project-f7b73c.svg)](https://www.owasp.org/projects) 9 | [![OpenSSF Best Practices](https://www.bestpractices.dev/projects/9266/badge)](https://www.bestpractices.dev/projects/9266) 10 | 11 | ## OWASP Foundation Threat Dragon Homepage 12 | 13 | This repo is the source for the OWASP Threat Dragon project [web pages](https://owasp.org/www-project-threat-dragon/) 14 | and the Threat Dragon documentation for [version 1.x][docs1] and for [version 2.x][docs2]. 15 | 16 | Create issues on this repository only for content hosted on the OWASP project site, including the documentation. 17 | For issues or suggestions related to the Threat Dragon tool itself use the 18 | [Threat Dragon](https://github.com/OWASP/threat-dragon) repository. 19 | 20 | You can contact the Threat Dragon community via the OWASP Slack 21 | [#project-threat-dragon](https://owasp.slack.com/messages/CURE8PQ68) project channel, 22 | and you may need to [subscribe](https://owasp.org/slack/invite) first. 23 | 24 | ### Project leaders 25 | 26 | * [Mike Goodwin](mailto:mike.goodwin@owasp.org) 27 | * [Jon Gadsden](mailto:jon.gadsden@owasp.org) 28 | * [Leo Reading](mailto:leo.reading@owasp.org) 29 | 30 | ---- 31 | 32 | Threat Dragon: _making threat modeling less threatening_ 33 | 34 | [build]: https://github.com/OWASP/www-project-threat-dragon/actions/workflows/ci.yaml 35 | [docs1]: https://threatdragon.github.io/ 36 | [docs2]: https://www.threatdragon.com/docs/ 37 | -------------------------------------------------------------------------------- /_config.yml: -------------------------------------------------------------------------------- 1 | remote_theme: "owasp/www--site-theme@main" 2 | plugins: 3 | - jekyll-include-cache-0.2.0 -------------------------------------------------------------------------------- /_data/docs-1.yaml: -------------------------------------------------------------------------------- 1 | docs_list_title: Threat Dragon v1.6.1 2 | docs: 3 | 4 | - title: 'Introduction' 5 | url: introduction 6 | 7 | - title: 'About' 8 | url: about 9 | 10 | - title: 'Install' 11 | url: install 12 | 13 | - title: 'Install: web app' 14 | url: install-webapp 15 | 16 | - title: 'Install: environment' 17 | url: setup 18 | 19 | - title: 'Install: desktop' 20 | url: install-desktop 21 | 22 | - title: 'Getting started' 23 | url: getting-started 24 | 25 | - title: 'Threat model diagrams' 26 | url: diagrams 27 | 28 | - title: 'Threat generation' 29 | url: threat-generation 30 | 31 | - title: 'API' 32 | url: api 33 | 34 | - title: 'CLI' 35 | url: cli 36 | 37 | - title: 'Downloads' 38 | url: downloads 39 | 40 | - title: 'Contributing' 41 | url: contributing 42 | 43 | - title: 'Credits' 44 | url: credits 45 | -------------------------------------------------------------------------------- /_data/docs-2.yaml: -------------------------------------------------------------------------------- 1 | docs_list_title: Threat Dragon v2.4 2 | docs: 3 | 4 | - title: 'Introduction' 5 | url: introduction 6 | -------------------------------------------------------------------------------- /_includes/banner.html: -------------------------------------------------------------------------------- 1 |
2 | {% if page.url contains "/docs-1/" %} 3 |
4 | You're viewing documentation for Threat Dragon version 1.6.1 5 |
6 | {% endif %} 7 | 8 | {% if page.url contains "/docs-2/" %} 9 |
10 | You're viewing documentation for Threat Dragon version 2.0 11 |
12 | {% endif %} 13 |
14 | -------------------------------------------------------------------------------- /_includes/breadcrumb.html: -------------------------------------------------------------------------------- 1 | 24 | -------------------------------------------------------------------------------- /_includes/navigation.html: -------------------------------------------------------------------------------- 1 | {% assign nav = site.data[include.collection] %} 2 | 3 |

{{ nav.docs_list_title }}

4 | -------------------------------------------------------------------------------- /_layouts/redirected.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |

Threat Dragon documentation has moved

10 |

The documentation has been migrated to the OWASP demo site 11 | which provides the latest Threat Dragon version 2.x documentation.

12 |

Redirecting...

13 | Click here if you are not redirected. 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /assets/images/cupcake-256x256.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OWASP/www-project-threat-dragon/60b9438fed9f8e9d26f5260987fc8d546d4dd0d1/assets/images/cupcake-256x256.png -------------------------------------------------------------------------------- /assets/images/itx-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OWASP/www-project-threat-dragon/60b9438fed9f8e9d26f5260987fc8d546d4dd0d1/assets/images/itx-logo.png -------------------------------------------------------------------------------- /assets/schemas/owasp.threat-dragon.schema.V1.json: -------------------------------------------------------------------------------- 1 | { 2 | "$id": "https://owasp.org/www-project-threat-dragon/assets/schemas/owasp.threat-dragon.schema.V1.json", 3 | "title": "Threat Dragon model schema", 4 | "description": "The threat models used by OWASP Threat Dragon", 5 | "type": "object", 6 | "properties": { 7 | "version": { 8 | "description": "Threat Dragon version used in the model", 9 | "type": "string", 10 | "maxLength": 5 11 | }, 12 | "summary": { 13 | "description": "Threat model project meta-data", 14 | "type": "object", 15 | "properties": { 16 | "description": { 17 | "description": "Description of the threat model used for report outputs", 18 | "type": "string" 19 | }, 20 | "id": { 21 | "description": "A unique identifier for this main threat model object", 22 | "type": "integer", 23 | "minimum": 0 24 | }, 25 | "owner": { 26 | "description": "The original creator or overall owner of the model", 27 | "type": "string" 28 | }, 29 | "title": { 30 | "description": "Threat model title", 31 | "type": "string" 32 | } 33 | }, 34 | "required": [ "title" ] 35 | }, 36 | "detail": { 37 | "description": "Threat model definition", 38 | "type": "object", 39 | "properties": { 40 | "contributors": { 41 | "description": "An array of contributors to the threat model project", 42 | "type": "array", 43 | "items": { 44 | "type": "object", 45 | "properties": { 46 | "name": { 47 | "description": "The name of the contributor", 48 | "type": "string" 49 | } 50 | } 51 | } 52 | }, 53 | "diagrams": { 54 | "description": "An array of single or multiple threat data-flow diagrams", 55 | "type": "array", 56 | "items": { 57 | "type": "object", 58 | "properties": { 59 | "diagramType": { 60 | "description": "The methodology used by the data-flow diagram", 61 | "type": "string", 62 | "minLength": 3 63 | }, 64 | "id": { 65 | "description": "The sequence number of the diagram", 66 | "type": "integer", 67 | "minimum": 0 68 | }, 69 | "size": { 70 | "description": "The size of the diagram drawing canvas", 71 | "type": "object", 72 | "properties": { 73 | "height": { 74 | "description": "The height of the diagram drawing canvas", 75 | "type": "integer", 76 | "minimum": 50 77 | }, 78 | "width": { 79 | "description": "The width of the diagram drawing canvas", 80 | "type": "integer", 81 | "minimum": 50 82 | } 83 | }, 84 | "required": [ "height", "width" ] 85 | }, 86 | "thumbnail": { 87 | "description": "The path to the thumbnail image for the diagram", 88 | "type": "string" 89 | }, 90 | "title": { 91 | "description": "The title of the data-flow diagram", 92 | "type": "string" 93 | }, 94 | "version": { 95 | "description": "Threat Dragon version used in the diagram", 96 | "type": "string", 97 | "maxLength": 5 98 | }, 99 | "diagramJson": { 100 | "description": "The data-flow diagram components", 101 | "type": "object", 102 | "properties": { 103 | "cells": { 104 | "description": "The individual diagram components", 105 | "type": "array", 106 | "items": { 107 | "type": "object", 108 | "properties": { 109 | "attrs": { 110 | "description": "The component display attributes", 111 | "type": "object", 112 | "properties": { 113 | ".element-shape": { 114 | "description": "The component shape attributes", 115 | "type": "object", 116 | "properties": { 117 | "class": { 118 | "description": "The component shape display attributes", 119 | "type": "string" 120 | } 121 | } 122 | }, 123 | "text": { 124 | "description": "The component text", 125 | "type": "object", 126 | "properties": { 127 | "text": { 128 | "description": "The component text contents", 129 | "type": "string" 130 | } 131 | }, 132 | "required": [ "text" ] 133 | }, 134 | ".element-text": { 135 | "description": "The component text attributes", 136 | "type": "object", 137 | "properties": { 138 | "class": { 139 | "description": "The component text display attributes", 140 | "type": "string" 141 | } 142 | } 143 | } 144 | } 145 | }, 146 | "angle": { 147 | "description": "The component rotation angle", 148 | "type": "integer" 149 | }, 150 | "description": { 151 | "description": "The component description", 152 | "type": "string" 153 | }, 154 | "handlesCardPayment": { 155 | "description": "The component flag set if the process handles credit card payment", 156 | "type": "boolean" 157 | }, 158 | "handlesGoodsOrServices": { 159 | "description": "The component flag set if the process is part of a retail site", 160 | "type": "boolean" 161 | }, 162 | "hasOpenThreats": { 163 | "description": "The component flag set if there are open threats", 164 | "type": "boolean" 165 | }, 166 | "id": { 167 | "description": "The component unique identifier (UUID)", 168 | "type": "string", 169 | "minLength": 36 170 | }, 171 | "isALog": { 172 | "description": "The component flag set if the store contains logs", 173 | "type": "boolean" 174 | }, 175 | "isWebApplication": { 176 | "description": "The component flag set if the process is a web application", 177 | "type": "boolean" 178 | }, 179 | "isEncrypted": { 180 | "description": "The component flag set if the data flow or store is encrypted", 181 | "type": "boolean" 182 | }, 183 | "isSigned": { 184 | "description": "The component flag set if the data store uses signatures", 185 | "type": "boolean" 186 | }, 187 | "isTrustBoundary": { 188 | "description": "The flag set if the component is a trust boundary curve or trust boundary box", 189 | "type": "boolean" 190 | }, 191 | "labels": { 192 | "description": "The floating labels used for boundary or data-flow", 193 | "type": "array", 194 | "items": { 195 | "type": "object", 196 | "properties": { 197 | "position": { 198 | "description": "The label position", 199 | "type": "number" 200 | }, 201 | "attrs": { 202 | "description": "The label text attributes", 203 | "type": "object", 204 | "properties": { 205 | "text": { 206 | "description": "The text attributes", 207 | "type": "object", 208 | "properties": { 209 | "font-size": { 210 | "description": "The text size", 211 | "type": "string" 212 | }, 213 | "font-weight": { 214 | "description": "The text weight", 215 | "type": "string" 216 | }, 217 | "text": { 218 | "description": "The text content", 219 | "type": "string" 220 | } 221 | }, 222 | "required": ["font-size", "font-weight", "text"] 223 | } 224 | }, 225 | "required": ["text"] 226 | } 227 | }, 228 | "required": [ "attrs", "position" ] 229 | } 230 | }, 231 | "outOfScope": { 232 | "description": "The component flag set if it is not in scope", 233 | "type": "boolean" 234 | }, 235 | "position": { 236 | "description": "The component position", 237 | "type": "object", 238 | "properties": { 239 | "x": { 240 | "description": "The component horizontal position", 241 | "type": "number" 242 | }, 243 | "y": { 244 | "description": "The component vertical position", 245 | "type": "number" 246 | } 247 | }, 248 | "required": [ "x", "y" ] 249 | }, 250 | "privilegeLevel": { 251 | "description": "The component's level of privilege/permissions", 252 | "type": "string" 253 | }, 254 | "reasonOutOfScope": { 255 | "description": "The component description if out of scope", 256 | "type": "string" 257 | }, 258 | "size": { 259 | "description": "The component size", 260 | "type": "object", 261 | "properties": { 262 | "height": { 263 | "description": "The component height", 264 | "type": "number", 265 | "minimum": 10 266 | }, 267 | "width": { 268 | "description": "The component width", 269 | "type": "number", 270 | "minimum": 10 271 | } 272 | }, 273 | "required": [ "height", "width" ] 274 | }, 275 | "smooth": { 276 | "description": "The component curve type, for data flows and boundaries", 277 | "type": "boolean" 278 | }, 279 | "source": { 280 | "description": "The component curve source", 281 | "type": "object", 282 | "properties": { 283 | "id": { 284 | "description": "The data-flow source component", 285 | "type": "string" 286 | }, 287 | "x": { 288 | "description": "The boundary horizontal curve source", 289 | "type": "integer" 290 | }, 291 | "y": { 292 | "description": "The boundary vertical curve source", 293 | "type": "integer" 294 | } 295 | } 296 | }, 297 | "storesCredentials": { 298 | "description": "The component flag set if store contains credentials/PII", 299 | "type": "boolean" 300 | }, 301 | "storesInventory": { 302 | "description": "The component flag set if store is part of a retail web application", 303 | "type": "boolean" 304 | }, 305 | "target": { 306 | "description": "The component curve target", 307 | "type": "object", 308 | "properties": { 309 | "id": { 310 | "description": "The data-flow target component", 311 | "type": "string" 312 | }, 313 | "x": { 314 | "description": "The boundary horizontal curve target", 315 | "type": "integer" 316 | }, 317 | "y": { 318 | "description": "The boundary vertical curve target", 319 | "type": "integer" 320 | } 321 | } 322 | }, 323 | "threats": { 324 | "description": "The threats associated with the component", 325 | "type": "array", 326 | "items": { 327 | "type": "object", 328 | "properties": { 329 | "description": { 330 | "description": "The threat description", 331 | "type": "string" 332 | }, 333 | "mitigation": { 334 | "description": "The threat mitigation", 335 | "type": "string" 336 | }, 337 | "modelType": { 338 | "description": "The threat methodology type", 339 | "type": "string" 340 | }, 341 | "number": { 342 | "description": "The unique number for the threat", 343 | "type": "integer", 344 | "minimum": 0 345 | }, 346 | "score": { 347 | "description": "The custom score/risk for the threat", 348 | "type": "string" 349 | }, 350 | "severity": { 351 | "description": "The threat severity as High, Medium or Low", 352 | "type": "string" 353 | }, 354 | "status": { 355 | "description": "The threat status as NA, Open or Mitigated", 356 | "type": "string" 357 | }, 358 | "threatId": { 359 | "description": "The threat ID as a UUID", 360 | "type": "string", 361 | "minLength": 36 362 | }, 363 | "title": { 364 | "description": "The threat title", 365 | "type": "string" 366 | }, 367 | "type": { 368 | "description": "The threat type, selection according to modelType", 369 | "type": "string" 370 | } 371 | }, 372 | "required": [ "description", "mitigation", "severity", "status", "title", "type" ] 373 | } 374 | }, 375 | "type": { 376 | "description": "The component type", 377 | "type": "string" 378 | }, 379 | "vertices": { 380 | "description": "The boundary or data-flow curve points", 381 | "type": "array", 382 | "items": { 383 | "type": "object", 384 | "properties": { 385 | "x": { 386 | "description": "The horizontal value of the curve point", 387 | "type": "integer" 388 | }, 389 | "y": { 390 | "description": "The vertical value of the curve point", 391 | "type": "integer" 392 | } 393 | }, 394 | "required": [ "x", "y" ] 395 | } 396 | }, 397 | "z": { 398 | "description": "The component Z-plane", 399 | "type": "integer" 400 | } 401 | }, 402 | "required": [ "attrs", "id", "size", "type", "z" ] 403 | } 404 | } 405 | } 406 | } 407 | }, 408 | "required": [ "diagramType", "id", "size", "thumbnail", "title", "diagramJson" ] 409 | } 410 | }, 411 | "diagramTop": { 412 | "description": "The highest diagram number in the threat model", 413 | "type": "integer", 414 | "minimum": 0 415 | }, 416 | "reviewer": { 417 | "description": "The reviewer of the overall threat model", 418 | "type": "string" 419 | }, 420 | "threatTop": { 421 | "description": "The highest threat number in the threat model", 422 | "type": "integer", 423 | "minimum": 0 424 | } 425 | }, 426 | "required": [ "contributors", "diagrams" ] 427 | } 428 | }, 429 | "required": [ "summary", "detail" ] 430 | } 431 | -------------------------------------------------------------------------------- /assets/schemas/owasp.threat-dragon.schema.V2.json: -------------------------------------------------------------------------------- 1 | { 2 | "$id": "https://owasp.org/www-project-threat-dragon/assets/schemas/owasp.threat-dragon.schema.V2.json", 3 | "title": "Threat Dragon model schema", 4 | "description": "The threat models used by OWASP Threat Dragon", 5 | "type": "object", 6 | "properties": { 7 | "version": { 8 | "description": "Threat Dragon version used in the model", 9 | "type": "string", 10 | "maxLength": 10 11 | }, 12 | "summary": { 13 | "description": "Threat model project meta-data", 14 | "type": "object", 15 | "properties": { 16 | "description": { 17 | "description": "Description of the threat model used for report outputs", 18 | "type": "string" 19 | }, 20 | "id": { 21 | "description": "A unique identifier for this main threat model object", 22 | "type": "integer", 23 | "minimum": 0 24 | }, 25 | "owner": { 26 | "description": "The original creator or overall owner of the model", 27 | "type": "string" 28 | }, 29 | "title": { 30 | "description": "Threat model title", 31 | "type": "string" 32 | } 33 | }, 34 | "required": [ "title" ] 35 | }, 36 | "detail": { 37 | "description": "Threat model definition", 38 | "type": "object", 39 | "properties": { 40 | "contributors": { 41 | "description": "An array of contributors to the threat model project", 42 | "type": "array", 43 | "items": { 44 | "type": "object", 45 | "properties": { 46 | "name": { 47 | "description": "The name of the contributor", 48 | "type": "string" 49 | } 50 | } 51 | } 52 | }, 53 | "diagrams": { 54 | "description": "An array of single or multiple threat data-flow diagrams", 55 | "type": "array", 56 | "items": { 57 | "type": "object", 58 | "properties": { 59 | "description": { 60 | "description": "The description of the diagram", 61 | "type": "string" 62 | }, 63 | "diagramType": { 64 | "description": "The methodology used by the data-flow diagram", 65 | "type": "string", 66 | "minLength": 3 67 | }, 68 | "id": { 69 | "description": "The sequence number of the diagram", 70 | "type": "integer", 71 | "minimum": 0 72 | }, 73 | "placeholder": { 74 | "description": "The text used when the description is empty", 75 | "type": "string" 76 | }, 77 | "thumbnail": { 78 | "description": "The path to the thumbnail image for the diagram", 79 | "type": "string" 80 | }, 81 | "title": { 82 | "description": "The title of the data-flow diagram", 83 | "type": "string" 84 | }, 85 | "version": { 86 | "description": "Threat Dragon version used in the diagram", 87 | "type": "string", 88 | "maxLength": 10 89 | }, 90 | "cells": { 91 | "description": "The individual diagram components", 92 | "type": "array", 93 | "items": { 94 | "type": "object", 95 | "properties": { 96 | "attrs": { 97 | "description": "The component display attributes", 98 | "type": "object", 99 | "properties": { 100 | "body": { 101 | "description": "The component stroke attributes", 102 | "type": "object", 103 | "properties": { 104 | "stroke": { 105 | "description": "The stroke color", 106 | "type": "string" 107 | }, 108 | "strokeWidth": { 109 | "description": "The stroke width", 110 | "type": "number" 111 | }, 112 | "strokeDasharray": { 113 | "description": "The stroke dash ratio", 114 | "type": "string", 115 | "nullable": true 116 | } 117 | }, 118 | "required": [ "stroke", "strokeWidth", "strokeDasharray" ] 119 | }, 120 | "line": { 121 | "description": "The component stroke attributes", 122 | "type": "object", 123 | "properties": { 124 | "stroke": { 125 | "description": "The stroke color", 126 | "type": "string" 127 | }, 128 | "strokeWidth": { 129 | "description": "The stroke width", 130 | "type": "number" 131 | }, 132 | "sourceMarker": { 133 | "description": "The line source marker", 134 | "type": [ "object", "string" ], 135 | "properties": { 136 | "name": { 137 | "description": "The source marker shape", 138 | "type": "string" 139 | } 140 | }, 141 | "required": [ "name" ] 142 | }, 143 | "strokeDasharray": { 144 | "description": "The stroke dash ratio", 145 | "type": "string", 146 | "nullable": true 147 | }, 148 | "targetMarker": { 149 | "description": "The line target marker", 150 | "type": [ "object", "string" ], 151 | "properties": { 152 | "name": { 153 | "description": "The target marker shape", 154 | "type": "string" 155 | } 156 | }, 157 | "required": [ "name" ] 158 | } 159 | }, 160 | "required": [ "targetMarker" ] 161 | } 162 | } 163 | }, 164 | "data": { 165 | "description": "The component parameters", 166 | "type": "object", 167 | "properties": { 168 | "description": { 169 | "description": "The component description", 170 | "type": "string" 171 | }, 172 | "handlesCardPayment": { 173 | "description": "The component flag set if the process handles credit card payment", 174 | "type": "boolean" 175 | }, 176 | "handlesGoodsOrServices": { 177 | "description": "The component flag set if the process is part of a retail site", 178 | "type": "boolean" 179 | }, 180 | "isALog": { 181 | "description": "The component flag set if the store contains logs", 182 | "type": "boolean" 183 | }, 184 | "isBidirectional": { 185 | "description": "The component flag set if it is not in scope", 186 | "type": "boolean" 187 | }, 188 | "isEncrypted": { 189 | "description": "The data-flow flag set if is bidirectional", 190 | "type": "boolean" 191 | }, 192 | "isPublicNetwork": { 193 | "description": "The data-flow flag set if it crosses a public network", 194 | "type": "boolean" 195 | }, 196 | "isSigned": { 197 | "description": "The component flag set if the data store uses signatures", 198 | "type": "boolean" 199 | }, 200 | "isTrustBoundary": { 201 | "description": "The flag set if the component is a trust boundary curve or trust boundary box", 202 | "type": "boolean" 203 | }, 204 | "isWebApplication": { 205 | "description": "The component flag set if the process is a web application", 206 | "type": "boolean" 207 | }, 208 | "name": { 209 | "description": "The component name", 210 | "type": "string" 211 | }, 212 | "outOfScope": { 213 | "description": "The component flag set if it is not in scope", 214 | "type": "boolean" 215 | }, 216 | "privilegeLevel": { 217 | "description": "The component's level of privilege/permissions", 218 | "type": "string" 219 | }, 220 | "protocol": { 221 | "description": "The data-flow protocol", 222 | "type": "string" 223 | }, 224 | "providesAuthentication": { 225 | "description": "The component flag set if the Actor provides Authentication", 226 | "type": "boolean" 227 | }, 228 | "reasonOutOfScope": { 229 | "description": "The component description if out of scope", 230 | "type": "string" 231 | }, 232 | "storesCredentials": { 233 | "description": "The component flag set if store contains credentials/PII", 234 | "type": "boolean" 235 | }, 236 | "storesInventory": { 237 | "description": "The component flag set if store is part of a retail web application", 238 | "type": "boolean" 239 | }, 240 | "type": { 241 | "description": "The component type", 242 | "type": "string" 243 | }, 244 | "hasOpenThreats": { 245 | "description": "The component flag set if there are open threats", 246 | "type": "boolean" 247 | } 248 | }, 249 | "required": [ "hasOpenThreats", "name", "type" ] 250 | }, 251 | "id": { 252 | "description": "The component unique identifier (UUID)", 253 | "type": "string", 254 | "minLength": 36 255 | }, 256 | "position": { 257 | "description": "The component position", 258 | "type": "object", 259 | "properties": { 260 | "x": { 261 | "description": "The component horizontal position", 262 | "type": "number" 263 | }, 264 | "y": { 265 | "description": "The component vertical position", 266 | "type": "number" 267 | } 268 | }, 269 | "required": [ "x", "y" ] 270 | }, 271 | "size": { 272 | "description": "The component body size (not line)", 273 | "type": "object", 274 | "properties": { 275 | "height": { 276 | "description": "The component height", 277 | "type": "number", 278 | "minimum": 10 279 | }, 280 | "width": { 281 | "description": "The component width", 282 | "type": "number", 283 | "minimum": 10 284 | } 285 | }, 286 | "required": [ "height", "width" ] 287 | }, 288 | "connector": { 289 | "description": "The data flows and boundary geometry", 290 | "type": "string" 291 | }, 292 | "source": { 293 | "description": "The component curve source", 294 | "type": "object", 295 | "properties": { 296 | "cell": { 297 | "description": "The data-flow source attachment point", 298 | "type": "string" 299 | }, 300 | "x": { 301 | "description": "The boundary horizontal curve source", 302 | "type": "integer" 303 | }, 304 | "y": { 305 | "description": "The boundary vertical curve source", 306 | "type": "integer" 307 | } 308 | } 309 | }, 310 | "target": { 311 | "description": "The component curve target", 312 | "type": "object", 313 | "properties": { 314 | "cell": { 315 | "description": "The data-flow target attachment point", 316 | "type": "string" 317 | }, 318 | "x": { 319 | "description": "The boundary horizontal curve target", 320 | "type": "integer" 321 | }, 322 | "y": { 323 | "description": "The boundary vertical curve target", 324 | "type": "integer" 325 | } 326 | } 327 | }, 328 | "threats": { 329 | "description": "The threats associated with the component", 330 | "type": "array", 331 | "items": { 332 | "type": "object", 333 | "properties": { 334 | "description": { 335 | "description": "The threat description", 336 | "type": "string" 337 | }, 338 | "mitigation": { 339 | "description": "The threat mitigation", 340 | "type": "string" 341 | }, 342 | "modelType": { 343 | "description": "The threat methodology type", 344 | "type": "string" 345 | }, 346 | "number": { 347 | "description": "The unique number for the threat", 348 | "type": "integer", 349 | "minimum": 0 350 | }, 351 | "score": { 352 | "description": "The custom score/risk for the threat", 353 | "type": "string" 354 | }, 355 | "severity": { 356 | "description": "The threat severity as High, Medium or Low", 357 | "type": "string" 358 | }, 359 | "status": { 360 | "description": "The threat status as NA, Open or Mitigated", 361 | "type": "string" 362 | }, 363 | "threatId": { 364 | "description": "The threat ID as a UUID", 365 | "type": "string", 366 | "minLength": 36 367 | }, 368 | "title": { 369 | "description": "The threat title", 370 | "type": "string" 371 | }, 372 | "type": { 373 | "description": "The threat type, selection according to modelType", 374 | "type": "string" 375 | } 376 | }, 377 | "required": [ "description", "mitigation", "severity", "status", "title", "type" ] 378 | } 379 | }, 380 | "shape": { 381 | "description": "The component shape", 382 | "type": "string" 383 | }, 384 | "visible": { 385 | "description": "The component visibility", 386 | "type": "boolean" 387 | }, 388 | "vertices": { 389 | "description": "The boundary or data-flow curve points", 390 | "type": "array", 391 | "items": { 392 | "type": "object", 393 | "properties": { 394 | "x": { 395 | "description": "The horizontal value of the curve point", 396 | "type": "number" 397 | }, 398 | "y": { 399 | "description": "The vertical value of the curve point", 400 | "type": "number" 401 | } 402 | }, 403 | "required": [ "x", "y" ] 404 | } 405 | }, 406 | "zIndex": { 407 | "description": "The component Z-plane", 408 | "type": "integer" 409 | } 410 | }, 411 | "required": [ "id", "shape", "zIndex" ] 412 | } 413 | } 414 | }, 415 | "required": [ "cells", "diagramType", "id", "thumbnail", "title", "version" ] 416 | } 417 | }, 418 | "diagramTop": { 419 | "description": "The highest diagram number in the threat model", 420 | "type": "integer", 421 | "minimum": 0 422 | }, 423 | "reviewer": { 424 | "description": "The reviewer of the overall threat model", 425 | "type": "string" 426 | }, 427 | "threatTop": { 428 | "description": "The highest threat number in the threat model", 429 | "type": "integer", 430 | "minimum": 0 431 | } 432 | }, 433 | "required": [ "contributors", "diagrams", "diagramTop", "reviewer", "threatTop" ] 434 | } 435 | }, 436 | "required": [ "version", "summary", "detail" ] 437 | } 438 | -------------------------------------------------------------------------------- /assets/schemas/threat.model.format.schema.json: -------------------------------------------------------------------------------- 1 | { 2 | "$id": "https://owasp.org/www-project-threat-dragon/assets/schemas/threat.model.format.schema.json", 3 | "title": "Threat Model Format", 4 | "description": "An open Threat Model Format (TMF) for threat models", 5 | "type": "object", 6 | "properties": { 7 | "tmfVersion": { 8 | "description": "The version of TMF using semantic versioning", 9 | "type": "string", 10 | "minLength": 5 11 | }, 12 | "project": { 13 | "description": "Threat Model metadata", 14 | "type": "object", 15 | "properties": { 16 | "title": { 17 | "description": "The title or name of the threat model project", 18 | "type": "string", 19 | "minLength": 1 20 | }, 21 | "version": { 22 | "description": "The version of the threat model", 23 | "type": "string" 24 | }, 25 | "appVersion": { 26 | "description": "The version of threat model program", 27 | "type": "string" 28 | }, 29 | "id": { 30 | "description": "A unique identifier for the threat model project", 31 | "type": "string" 32 | }, 33 | "overview": { 34 | "description": "An overview / description of the threat model", 35 | "type": [ "object", "string" ], 36 | "properties": { 37 | "business": { 38 | "description": "A business overview of the threat model", 39 | "type": "string" 40 | }, 41 | "technical": { 42 | "description": "A technical overview of the threat model", 43 | "type": "string" 44 | } 45 | } 46 | }, 47 | "owner": { 48 | "description": "The owner of the threat model project", 49 | "type": [ "object", "string" ], 50 | "properties": { 51 | "name": { 52 | "description": "The name of the owner", 53 | "type": "string" 54 | }, 55 | "contact": { 56 | "description": "Contact details for the owner", 57 | "type": "string" 58 | } 59 | } 60 | }, 61 | "reviewers": { 62 | "description": "The reviewers to the threat model project", 63 | "type": [ "array", "string" ], 64 | "items": { 65 | "description": "The reviewer", 66 | "type": [ "object", "string" ], 67 | "properties": { 68 | "name": { 69 | "description": "The name of the reviewer", 70 | "type": "string" 71 | }, 72 | "contact": { 73 | "description": "Contact details for the reviewer", 74 | "type": "string" 75 | } 76 | } 77 | } 78 | }, 79 | "contributors": { 80 | "description": "The contributors to the threat model project", 81 | "type": [ "array", "string" ], 82 | "items": { 83 | "description": "The contributor", 84 | "type": [ "object", "string" ], 85 | "properties": { 86 | "name": { 87 | "description": "The name of the contributor", 88 | "type": "string" 89 | }, 90 | "contact": { 91 | "description": "Contact details for the contributor", 92 | "type": "string" 93 | } 94 | } 95 | } 96 | }, 97 | "required": [ "title" ] 98 | } 99 | }, 100 | "representations": { 101 | "description": "An array of representations of the threat model", 102 | "type": "array", 103 | "items": { 104 | "description": "A representation of the threat model", 105 | "type": "object", 106 | "properties": { 107 | "title": { "$ref": "#/$defs/title" }, 108 | "id": { "$ref": "#/$defs/id" }, 109 | "overview": { 110 | "description": "A description of the representation", 111 | "type": "string" 112 | } 113 | }, 114 | "required": [ "title", "id" ] 115 | } 116 | }, 117 | "requirements": { 118 | "description": "An array of security requirements for the threat model", 119 | "type": "array", 120 | "items": { 121 | "description": "A security requirement for the threat model", 122 | "type": "object", 123 | "properties": { 124 | "title": { "$ref": "#/$defs/title" }, 125 | "id": { "$ref": "#/$defs/id" }, 126 | "description": { 127 | "description": "A description of the security requirement", 128 | "type": "string" 129 | } 130 | }, 131 | "required": [ "title", "id" ] 132 | } 133 | }, 134 | "actors": { 135 | "description": "An array of actors in the threat model", 136 | "type": "array", 137 | "items": { 138 | "description": "An actor described by the threat model", 139 | "type": "object", 140 | "properties": { 141 | "title": { "$ref": "#/$defs/title" }, 142 | "id": { "$ref": "#/$defs/id" }, 143 | "description": { 144 | "description": "A description of the actor", 145 | "type": "string" 146 | } 147 | }, 148 | "required": [ "title", "id" ] 149 | } 150 | }, 151 | "assets": { 152 | "description": "An array of assets in the threat model", 153 | "type": "array", 154 | "items": { 155 | "description": "An asset described in the threat model", 156 | "type": "object", 157 | "properties": { 158 | "title": { "$ref": "#/$defs/title" }, 159 | "id": { "$ref": "#/$defs/id" }, 160 | "description": { 161 | "description": "A description of the asset", 162 | "type": "string" 163 | } 164 | }, 165 | "required": [ "title", "id" ] 166 | } 167 | }, 168 | "assumptions": { 169 | "description": "An array of assumptions made in the threat model", 170 | "type": "array", 171 | "items": { 172 | "description": "An assumption made in the threat model", 173 | "type": "object", 174 | "properties": { 175 | "title": { "$ref": "#/$defs/title" }, 176 | "id": { "$ref": "#/$defs/id" }, 177 | "description": { 178 | "description": "A description of the assumption", 179 | "type": "string" 180 | } 181 | }, 182 | "required": [ "title", "id" ] 183 | } 184 | }, 185 | "boundaries": { 186 | "description": "An array of (trust) boundaries in the threat model", 187 | "type": "array", 188 | "items": { 189 | "description": "A boundary described in the threat model", 190 | "type": "object", 191 | "properties": { 192 | "title": { "$ref": "#/$defs/title" }, 193 | "id": { "$ref": "#/$defs/id" }, 194 | "description": { 195 | "description": "A description of the boundary", 196 | "type": "string" 197 | } 198 | }, 199 | "required": [ "title", "id" ] 200 | } 201 | }, 202 | "data": { 203 | "description": "An array of data descriptions in the threat model, at rest or in transit", 204 | "type": "array", 205 | "items": { 206 | "description": "A data description included in the threat model", 207 | "type": "object", 208 | "properties": { 209 | "title": { "$ref": "#/$defs/title" }, 210 | "id": { "$ref": "#/$defs/id" }, 211 | "description": { 212 | "description": "A description for the data description", 213 | "type": "string" 214 | } 215 | }, 216 | "required": [ "title", "id" ] 217 | } 218 | }, 219 | "findings": { 220 | "description": "An array of findings identified in the threat model", 221 | "type": "array", 222 | "items": { 223 | "description": "A finding identified in the threat model", 224 | "type": "object", 225 | "properties": { 226 | "title": { "$ref": "#/$defs/title" }, 227 | "id": { "$ref": "#/$defs/id" }, 228 | "exclude": { 229 | "description": "The status of exclusion for the finding", 230 | "type": "object", 231 | "properties": { 232 | "excluded": { 233 | "description": "Mark the finding in the threat model as excluded", 234 | "type": "boolean" 235 | }, 236 | "reason": { 237 | "description": "The reason for excluding the finding, such as false positive", 238 | "type": "string" 239 | } 240 | } 241 | }, 242 | "description": { 243 | "description": "A description of the finding", 244 | "type": "string" 245 | } 246 | }, 247 | "required": [ "title", "id" ] 248 | } 249 | }, 250 | "flows": { 251 | "description": "An array of data flows for the threat model", 252 | "type": "array", 253 | "items": { 254 | "description": "A data flow included in the threat model", 255 | "type": "object", 256 | "properties": { 257 | "title": { "$ref": "#/$defs/title" }, 258 | "id": { "$ref": "#/$defs/id" }, 259 | "description": { 260 | "description": "A description of the data flow", 261 | "type": "string" 262 | } 263 | }, 264 | "required": [ "title", "id" ] 265 | } 266 | }, 267 | "elements": { 268 | "description": "An array of elements in the threat model", 269 | "type": "array", 270 | "items": { 271 | "description": "An element included in the threat model such as processes, servers, functions etc", 272 | "type": "object", 273 | "properties": { 274 | "title": { "$ref": "#/$defs/title" }, 275 | "id": { "$ref": "#/$defs/id" }, 276 | "description": { 277 | "description": "A description of the process", 278 | "type": "string" 279 | } 280 | }, 281 | "required": [ "title", "id" ] 282 | } 283 | }, 284 | "remediations": { 285 | "description": "An array of remediations in the threat model", 286 | "type": "array", 287 | "items": { 288 | "description": "A remediation included in the threat model", 289 | "type": "object", 290 | "properties": { 291 | "title": { "$ref": "#/$defs/title" }, 292 | "id": { "$ref": "#/$defs/id" }, 293 | "description": { 294 | "description": "A description of the remediation", 295 | "type": "string" 296 | } 297 | }, 298 | "required": [ "title", "id" ] 299 | } 300 | }, 301 | "threats": { 302 | "description": "An array of threats identified in the threat model", 303 | "type": "array", 304 | "items": { 305 | "description": "A threat identified in the threat model", 306 | "type": "object", 307 | "properties": { 308 | "title": { "$ref": "#/$defs/title" }, 309 | "id": { "$ref": "#/$defs/id" }, 310 | "description": { 311 | "description": "A description of the threat", 312 | "type": "string" 313 | } 314 | }, 315 | "required": [ "title", "id" ] 316 | } 317 | } 318 | }, 319 | "required": [ "project" ], 320 | "$defs": { 321 | "id": { 322 | "description": "A unique identifier such as a UUID", 323 | "type": "string", 324 | "minLength": 1 325 | }, 326 | "title": { 327 | "description": "A title that may also be used as a label", 328 | "type": "string", 329 | "minLength": 1 330 | }, 331 | "position": { 332 | "description": "Diagram element position", 333 | "type": "object", 334 | "properties": { 335 | "x": { 336 | "description": "Element horizontal position that may be negative", 337 | "type": "number" 338 | }, 339 | "y": { 340 | "description": "Element vertical position that may be negative", 341 | "type": "number" 342 | } 343 | }, 344 | "required": ["x", "y"] 345 | }, 346 | "size": { 347 | "description": "Diagram element geometry", 348 | "type": "object", 349 | "properties": { 350 | "width": { 351 | "description": "Element width that cannot be negative", 352 | "type": "number", 353 | "minimum": 0 354 | }, 355 | "height": { 356 | "description": "Element height that cannot be negative", 357 | "type": "number", 358 | "minimum": 0 359 | } 360 | }, 361 | "required": ["width", "height"] 362 | } 363 | } 364 | } 365 | -------------------------------------------------------------------------------- /code_of_conduct.md: -------------------------------------------------------------------------------- 1 | # Contributor Covenant Code of Conduct 2 | 3 | ## Our Pledge 4 | 5 | We as members, contributors, and leaders pledge to make participation in our 6 | community a harassment-free experience for everyone, regardless of age, body 7 | size, visible or invisible disability, ethnicity, sex characteristics, gender 8 | identity and expression, level of experience, education, socio-economic status, 9 | nationality, personal appearance, race, caste, color, religion, or sexual identity 10 | and orientation. 11 | 12 | We pledge to act and interact in ways that contribute to an open, welcoming, 13 | diverse, inclusive, and healthy community. 14 | 15 | ## Our Standards 16 | 17 | Examples of behavior that contributes to a positive environment for our 18 | community include: 19 | 20 | * Demonstrating empathy and kindness toward other people 21 | * Being respectful of differing opinions, viewpoints, and experiences 22 | * Giving and gracefully accepting constructive feedback 23 | * Accepting responsibility and apologizing to those affected by our mistakes, 24 | and learning from the experience 25 | * Focusing on what is best not just for us as individuals, but for the 26 | overall community 27 | 28 | Examples of unacceptable behavior include: 29 | 30 | * The use of sexualized language or imagery, and sexual attention or 31 | advances of any kind 32 | * Trolling, insulting or derogatory comments, and personal or political attacks 33 | * Public or private harassment 34 | * Publishing others' private information, such as a physical or email 35 | address, without their explicit permission 36 | * Other conduct which could reasonably be considered inappropriate in a 37 | professional setting 38 | 39 | ## Enforcement Responsibilities 40 | 41 | Community leaders are responsible for clarifying and enforcing our standards of 42 | acceptable behavior and will take appropriate and fair corrective action in 43 | response to any behavior that they deem inappropriate, threatening, offensive, 44 | or harmful. 45 | 46 | Community leaders have the right and responsibility to remove, edit, or reject 47 | comments, commits, code, wiki edits, issues, and other contributions that are 48 | not aligned to this Code of Conduct, and will communicate reasons for moderation 49 | decisions when appropriate. 50 | 51 | ## Scope 52 | 53 | This Code of Conduct applies within all community spaces, and also applies when 54 | an individual is officially representing the community in public spaces. 55 | Examples of representing our community include using an official e-mail address, 56 | posting via an official social media account, or acting as an appointed 57 | representative at an online or offline event. 58 | 59 | ## Enforcement 60 | 61 | Instances of abusive, harassing, or otherwise unacceptable behavior may be 62 | reported to the community leaders responsible for enforcement by 63 | emailing [the project team](mailto:owasp.foundation@owasp.org) at the OWASP foundation. 64 | All complaints will be reviewed and investigated promptly and fairly. 65 | 66 | All community leaders are obligated to respect the privacy and security of the 67 | reporter of any incident. 68 | 69 | ## Enforcement Guidelines 70 | 71 | Community leaders will follow these Community Impact Guidelines in determining 72 | the consequences for any action they deem in violation of this Code of Conduct: 73 | 74 | ### 1. Correction 75 | 76 | **Community Impact**: Use of inappropriate language or other behavior deemed 77 | unprofessional or unwelcome in the community. 78 | 79 | **Consequence**: A private, written warning from community leaders, providing 80 | clarity around the nature of the violation and an explanation of why the 81 | behavior was inappropriate. A public apology may be requested. 82 | 83 | ### 2. Warning 84 | 85 | **Community Impact**: A violation through a single incident or series 86 | of actions. 87 | 88 | **Consequence**: A warning with consequences for continued behavior. No 89 | interaction with the people involved, including unsolicited interaction with 90 | those enforcing the Code of Conduct, for a specified period of time. This 91 | includes avoiding interactions in community spaces as well as external channels 92 | like social media. Violating these terms may lead to a temporary or 93 | permanent ban. 94 | 95 | ### 3. Temporary Ban 96 | 97 | **Community Impact**: A serious violation of community standards, including 98 | sustained inappropriate behavior. 99 | 100 | **Consequence**: A temporary ban from any sort of interaction or public 101 | communication with the community for a specified period of time. No public or 102 | private interaction with the people involved, including unsolicited interaction 103 | with those enforcing the Code of Conduct, is allowed during this period. 104 | Violating these terms may lead to a permanent ban. 105 | 106 | ### 4. Permanent Ban 107 | 108 | **Community Impact**: Demonstrating a pattern of violation of community 109 | standards, including sustained inappropriate behavior, harassment of an 110 | individual, or aggression toward or disparagement of classes of individuals. 111 | 112 | **Consequence**: A permanent ban from any sort of public interaction within 113 | the community. 114 | 115 | ## Attribution 116 | 117 | This Code of Conduct is adapted from the [Contributor Covenant][homepage], 118 | version 2.0, available from the [contributor covenant][cofc] site. 119 | 120 | Community Impact Guidelines were inspired by [Mozilla's code of conduct enforcement ladder][diversity]. 121 | 122 | See the [FAQ][faq] for answers to common questions about this code of conduct, 123 | and translations are available of this [contributor covenant][translate]. 124 | 125 | [cofc]: https://www.contributor-covenant.org/version/2/0/code_of_conduct.html 126 | [diversity]: https://github.com/mozilla/diversity 127 | [faq]: https://www.contributor-covenant.org/faq 128 | [homepage]: https://www.contributor-covenant.org 129 | [translate]: https://www.contributor-covenant.org/translations 130 | -------------------------------------------------------------------------------- /contributing.md: -------------------------------------------------------------------------------- 1 | # Contributing to OWASP Threat Dragon 2 | 3 | Threat Dragon is a community project, and we are always delighted to welcome new contributors! 4 | 5 | When contributing: 6 | 7 | * see if there is [already an issue](https://github.com/OWASP/www-project-threat-dragon/issues) for what you want to do 8 | * follow our [Code of Conduct](code_of_conduct.md) 9 | 10 | ## Got a Question or Problem? 11 | 12 | If you have a question or problem relating to using Threat Dragon then the first thing to do is to check the 13 | [Frequently Asked Questions](https://owasp.org/www-project-threat-dragon/#div-faqs) tab 14 | on the [OWASP project page](https://owasp.org/www-project-threat-dragon/). 15 | Threat Dragon documentation is [available online](https://www.threatdragon.com/docs/). 16 | 17 | If this does not help then one of the 18 | [leaders / collaborators](https://github.com/OWASP/www-project-threat-dragon/blob/main/leaders.md) 19 | should be able to help. 20 | 21 | ## Found an Issue? 22 | 23 | If you have found a bug then raise an issue on 24 | [Threat Dragon](https://github.com/OWASP/www-project-threat-dragon/issues/), 25 | and make sure you have logged into github first. 26 | 27 | It is worth checking to see if its [already been reported](https://github.com/OWASP/www-project-threat-dragon/issues), 28 | and including as much information as you can to help us diagnose your problem. 29 | 30 | ## Found a Vulnerability? 31 | 32 | If you think you have found a vulnerability in Threat Dragon then please report it to our 33 | [leaders / collaborators](https://github.com/OWASP/www-project-threat-dragon/blob/main/leaders.md). 34 | 35 | We are always very grateful to researchers who report vulnerabilities responsibly and are very happy 36 | to give all credit for the valuable assistance they provide. 37 | 38 | ## Have a Feature Request? 39 | 40 | If you have a suggestion for new functionality then you can raise this request as an issue on 41 | [Threat Dragon](https://github.com/OWASP/threat-dragon/issues/new/choose). 42 | 43 | Worth checking to see if its [already been reported](https://github.com/OWASP/threat-dragon/issues), 44 | and include as much information as you can so that we can fully understand your requirements. 45 | 46 | ## Coding 47 | 48 | There is always lots of coding to be done! Threat Dragon welcomes contributions and issues: 49 | [TD github repo](https://github.com/OWASP/threat-dragon/issues) 50 | 51 | ---- 52 | 53 | Threat Dragon: _making threat modeling less threatening_ 54 | -------------------------------------------------------------------------------- /docs-1/about.md: -------------------------------------------------------------------------------- 1 | --- 2 | 3 | title: About 4 | layout: redirected 5 | tags: threatdragon 6 | document: Threat Dragon version 1.6.1 7 | permalink: /docs-1/about/ 8 | redirect_to: https://threatdragon.github.io/about 9 | 10 | --- 11 | -------------------------------------------------------------------------------- /docs-1/api.md: -------------------------------------------------------------------------------- 1 | --- 2 | 3 | title: API 4 | layout: redirected 5 | tags: threatdragon 6 | document: Threat Dragon version 1.6.1 7 | permalink: /docs-1/api/ 8 | redirect_to: https://threatdragon.github.io/api/ 9 | 10 | --- 11 | -------------------------------------------------------------------------------- /docs-1/cli.md: -------------------------------------------------------------------------------- 1 | --- 2 | 3 | title: CLI 4 | layout: redirected 5 | tags: threatdragon 6 | document: Threat Dragon version 1.6.1 7 | permalink: /docs-1/cli/ 8 | redirect_to: https://threatdragon.github.io/cli/ 9 | 10 | --- 11 | -------------------------------------------------------------------------------- /docs-1/contributing.md: -------------------------------------------------------------------------------- 1 | --- 2 | 3 | title: Contributing 4 | layout: redirected 5 | tags: threatdragon 6 | document: Threat Dragon version 1.6.1 7 | permalink: /docs-1/contributing/ 8 | redirect_to: https://threatdragon.github.io/contribute/ 9 | 10 | --- 11 | -------------------------------------------------------------------------------- /docs-1/credits.md: -------------------------------------------------------------------------------- 1 | --- 2 | 3 | title: Credits 4 | layout: redirected 5 | tags: threatdragon 6 | document: Threat Dragon version 1.6.1 7 | permalink: /docs-1/credits/ 8 | redirect_to: https://threatdragon.github.io/credits/ 9 | 10 | --- 11 | -------------------------------------------------------------------------------- /docs-1/downloads.md: -------------------------------------------------------------------------------- 1 | --- 2 | 3 | title: Downloads 4 | layout: redirected 5 | tags: threatdragon 6 | document: Threat Dragon version 1.6.1 7 | permalink: /docs-1/downloads/ 8 | redirect_to: https://threatdragon.github.io/downloads/ 9 | 10 | --- 11 | -------------------------------------------------------------------------------- /docs-1/getting-started.md: -------------------------------------------------------------------------------- 1 | --- 2 | 3 | title: Getting started 4 | layout: redirected 5 | tags: threatdragon 6 | document: Threat Dragon version 1.6.1 7 | permalink: /docs-1/getting-started/ 8 | redirect_to: https://threatdragon.github.io/getting-started/ 9 | 10 | --- 11 | -------------------------------------------------------------------------------- /docs-1/info.md: -------------------------------------------------------------------------------- 1 | {% include navigation.html collection="docs-1" %} 2 | -------------------------------------------------------------------------------- /docs-1/install/info.md: -------------------------------------------------------------------------------- 1 | {% include navigation.html collection="docs-1" %} 2 | -------------------------------------------------------------------------------- /docs-1/install/install-desktop.md: -------------------------------------------------------------------------------- 1 | --- 2 | 3 | title: Install desktop 4 | layout: redirected 5 | tags: threatdragon 6 | document: Threat Dragon version 1.6.1 7 | permalink: /docs-1/install-desktop/ 8 | redirect_to: https://threatdragon.github.io/install-desktop/ 9 | 10 | --- 11 | -------------------------------------------------------------------------------- /docs-1/install/install-webapp.md: -------------------------------------------------------------------------------- 1 | --- 2 | 3 | title: Install web app 4 | layout: redirected 5 | tags: threatdragon 6 | document: Threat Dragon version 1.6.1 7 | permalink: /docs-1/install-webapp/ 8 | redirect_to: https://threatdragon.github.io/install-webapp/ 9 | 10 | --- 11 | -------------------------------------------------------------------------------- /docs-1/install/install.md: -------------------------------------------------------------------------------- 1 | --- 2 | 3 | title: Install 4 | layout: redirected 5 | tags: threatdragon 6 | document: Threat Dragon version 1.6.1 7 | permalink: /docs-1/install/ 8 | redirect_to: https://threatdragon.github.io/install/ 9 | 10 | --- 11 | -------------------------------------------------------------------------------- /docs-1/install/setup-env.md: -------------------------------------------------------------------------------- 1 | --- 2 | 3 | title: Install environment 4 | layout: redirected 5 | tags: threatdragon 6 | document: Threat Dragon version 1.6.1 7 | permalink: /docs-1/setup/ 8 | redirect_to: https://threatdragon.github.io/setup-env/ 9 | 10 | --- 11 | -------------------------------------------------------------------------------- /docs-1/introduction.md: -------------------------------------------------------------------------------- 1 | --- 2 | 3 | title: Home 4 | layout: redirected 5 | tags: threatdragon 6 | document: Threat Dragon version 1.6.1 7 | permalink: /docs-1/introduction/ 8 | redirect_to: https://threatdragon.github.io/home 9 | 10 | --- 11 | -------------------------------------------------------------------------------- /docs-1/threat-generation.md: -------------------------------------------------------------------------------- 1 | --- 2 | 3 | title: Threat generation 4 | layout: redirected 5 | tags: threatdragon 6 | document: Threat Dragon version 1.6.1 7 | permalink: /docs-1/threat-generation/ 8 | redirect_to: https://threatdragon.github.io/threat-generation/ 9 | 10 | --- 11 | -------------------------------------------------------------------------------- /docs-1/threat-model-diagrams.md: -------------------------------------------------------------------------------- 1 | --- 2 | 3 | title: Threat model diagrams 4 | layout: redirected 5 | tags: threatdragon 6 | document: Threat Dragon version 1.6.1 7 | permalink: /docs-1/diagrams/ 8 | redirect_to: https://threatdragon.github.io/threat-model-diagrams/ 9 | 10 | --- 11 | -------------------------------------------------------------------------------- /docs-1/toc.md: -------------------------------------------------------------------------------- 1 | --- 2 | 3 | title: Table of Contents 4 | layout: redirected 5 | tags: threatdragon 6 | document: Threat Dragon version 1.6.1 7 | permalink: /docs-1/ 8 | redirect_to: https://threatdragon.github.io/ 9 | 10 | --- 11 | -------------------------------------------------------------------------------- /docs-2/about.md: -------------------------------------------------------------------------------- 1 | --- 2 | 3 | title: About 4 | layout: redirected 5 | tags: threatdragon 6 | document: OWASP Threat Dragon version 2.4 7 | permalink: /docs-2/about/ 8 | redirect_to: https://www.threatdragon.com/docs/home/about.html 9 | 10 | --- 11 | -------------------------------------------------------------------------------- /docs-2/credits.md: -------------------------------------------------------------------------------- 1 | --- 2 | 3 | title: Credits 4 | layout: redirected 5 | tags: threatdragon 6 | document: OWASP Threat Dragon version 2.4 7 | permalink: /docs-2/credits/ 8 | redirect_to: https://www.threatdragon.com/docs/home/credits.html 9 | 10 | --- 11 | -------------------------------------------------------------------------------- /docs-2/development/api.md: -------------------------------------------------------------------------------- 1 | --- 2 | 3 | title: API 4 | layout: redirected 5 | tags: threatdragon 6 | document: OWASP Threat Dragon version 2.4 7 | permalink: /docs-2/api/ 8 | redirect_to: https://www.threatdragon.com/docs/development/api.html 9 | 10 | --- 11 | -------------------------------------------------------------------------------- /docs-2/development/contributing.md: -------------------------------------------------------------------------------- 1 | --- 2 | 3 | title: Contributing 4 | layout: redirected 5 | tags: threatdragon 6 | document: OWASP Threat Dragon version 2.4 7 | permalink: /docs-2/contributing/ 8 | redirect_to: https://www.threatdragon.com/docs/development/contributing.html 9 | 10 | --- 11 | -------------------------------------------------------------------------------- /docs-2/development/environment.md: -------------------------------------------------------------------------------- 1 | --- 2 | 3 | title: Development environment 4 | layout: redirected 5 | tags: threatdragon 6 | document: OWASP Threat Dragon version 2.4 7 | permalink: /docs-2/development-environment/ 8 | redirect_to: https://www.threatdragon.com/docs/development/environment.html 9 | 10 | --- 11 | -------------------------------------------------------------------------------- /docs-2/development/info.md: -------------------------------------------------------------------------------- 1 | {% include navigation.html collection="docs-2" %} 2 | -------------------------------------------------------------------------------- /docs-2/development/internationalization.md: -------------------------------------------------------------------------------- 1 | --- 2 | 3 | title: Translations 4 | layout: redirected 5 | tags: threatdragon 6 | document: OWASP Threat Dragon version 2.4 7 | permalink: /docs-2/internationalization/ 8 | redirect_to: https://www.threatdragon.com/docs/development/translations.html 9 | 10 | --- 11 | -------------------------------------------------------------------------------- /docs-2/development/local-development.md: -------------------------------------------------------------------------------- 1 | --- 2 | 3 | title: Development 4 | layout: redirected 5 | tags: threatdragon 6 | document: OWASP Threat Dragon version 2.4 7 | permalink: /docs-2/local-development/ 8 | redirect_to: https://www.threatdragon.com/docs/development/development.html 9 | 10 | --- 11 | -------------------------------------------------------------------------------- /docs-2/development/schema.md: -------------------------------------------------------------------------------- 1 | --- 2 | 3 | title: Schema 4 | layout: redirected 5 | tags: threatdragon 6 | document: OWASP Threat Dragon version 2.4 7 | permalink: /docs-2/schema/ 8 | redirect_to: https://www.threatdragon.com/docs/development/schema.html 9 | 10 | --- 11 | -------------------------------------------------------------------------------- /docs-2/development/testing/actions.md: -------------------------------------------------------------------------------- 1 | --- 2 | 3 | title: Pipeline actions 4 | layout: redirected 5 | tags: threatdragon 6 | document: OWASP Threat Dragon version 2.4 7 | permalink: /docs-2/pipeline-actions/ 8 | redirect_to: https://www.threatdragon.com/docs/testing/actions.html 9 | 10 | --- 11 | -------------------------------------------------------------------------------- /docs-2/development/testing/adhoc.md: -------------------------------------------------------------------------------- 1 | --- 2 | 3 | title: Testing 4 | layout: redirected 5 | tags: threatdragon 6 | document: OWASP Threat Dragon version 2.4 7 | permalink: /docs-2/adhoc/ 8 | redirect_to: https://www.threatdragon.com/docs/testing/testing.html 9 | 10 | --- 11 | -------------------------------------------------------------------------------- /docs-2/development/testing/e2e.md: -------------------------------------------------------------------------------- 1 | --- 2 | 3 | title: End to end testing 4 | layout: redirected 5 | tags: threatdragon 6 | document: OWASP Threat Dragon version 2.4 7 | permalink: /docs-2/e2e/ 8 | redirect_to: https://www.threatdragon.com/docs/testing/e2e.html 9 | 10 | --- 11 | -------------------------------------------------------------------------------- /docs-2/development/testing/info.md: -------------------------------------------------------------------------------- 1 | {% include navigation.html collection="docs-2" %} 2 | -------------------------------------------------------------------------------- /docs-2/development/testing/unit.md: -------------------------------------------------------------------------------- 1 | --- 2 | 3 | title: Unit testing 4 | layout: redirected 5 | tags: threatdragon 6 | document: OWASP Threat Dragon version 2.4 7 | permalink: /docs-2/unit/ 8 | redirect_to: https://www.threatdragon.com/docs/testing/unit.html 9 | 10 | --- 11 | -------------------------------------------------------------------------------- /docs-2/info.md: -------------------------------------------------------------------------------- 1 | {% include navigation.html collection="docs-2" %} 2 | -------------------------------------------------------------------------------- /docs-2/introduction.md: -------------------------------------------------------------------------------- 1 | --- 2 | 3 | title: Introduction 4 | layout: redirected 5 | tags: threatdragon 6 | document: OWASP Threat Dragon version 2.4 7 | permalink: /docs-2/introduction/ 8 | redirect_to: https://www.threatdragon.com/docs/ 9 | 10 | --- 11 | -------------------------------------------------------------------------------- /docs-2/toc.md: -------------------------------------------------------------------------------- 1 | --- 2 | 3 | title: Table of Contents 4 | layout: redirected 5 | tags: threatdragon 6 | document: OWASP Threat Dragon version 2.4 7 | permalink: /docs-2/ 8 | redirect_to: https://www.threatdragon.com/docs/ 9 | 10 | --- 11 | -------------------------------------------------------------------------------- /docs-2/trust/container.md: -------------------------------------------------------------------------------- 1 | --- 2 | 3 | title: Container scanning 4 | layout: redirected 5 | tags: threatdragon 6 | document: OWASP Threat Dragon version 2.4 7 | permalink: /docs-2/container/ 8 | redirect_to: https://www.threatdragon.com/docs/trust/container.html 9 | 10 | --- 11 | -------------------------------------------------------------------------------- /docs-2/trust/dast.md: -------------------------------------------------------------------------------- 1 | --- 2 | 3 | title: DAST 4 | layout: redirected 5 | tags: threatdragon 6 | document: OWASP Threat Dragon version 2.4 7 | permalink: /docs-2/dast/ 8 | redirect_to: https://www.threatdragon.com/docs/trust/dast.html 9 | 10 | --- 11 | -------------------------------------------------------------------------------- /docs-2/trust/dependencies.md: -------------------------------------------------------------------------------- 1 | --- 2 | 3 | title: Dependency management 4 | layout: redirected 5 | tags: threatdragon 6 | document: OWASP Threat Dragon version 2.4 7 | permalink: /docs-2/dependencies/ 8 | redirect_to: https://www.threatdragon.com/docs/trust/dependencies.html 9 | 10 | --- 11 | -------------------------------------------------------------------------------- /docs-2/trust/incidents.md: -------------------------------------------------------------------------------- 1 | --- 2 | 3 | title: Trust 4 | layout: redirected 5 | tags: threatdragon 6 | document: OWASP Threat Dragon version 2.4 7 | permalink: /docs-2/incidents/ 8 | redirect_to: https://www.threatdragon.com/docs/trust/trust.html 9 | 10 | --- 11 | -------------------------------------------------------------------------------- /docs-2/trust/info.md: -------------------------------------------------------------------------------- 1 | {% include navigation.html collection="docs-2" %} 2 | -------------------------------------------------------------------------------- /docs-2/trust/sast.md: -------------------------------------------------------------------------------- 1 | --- 2 | 3 | title: SAST 4 | layout: redirected 5 | tags: threatdragon 6 | document: OWASP Threat Dragon version 2.4 7 | permalink: /docs-2/sast/ 8 | redirect_to: https://www.threatdragon.com/docs/trust/sast.html 9 | 10 | --- 11 | -------------------------------------------------------------------------------- /docs-2/usage/config/bitbucket.md: -------------------------------------------------------------------------------- 1 | --- 2 | 3 | title: Configure Bitbucket access 4 | layout: redirected 5 | tags: threatdragon 6 | document: OWASP Threat Dragon version 2.4 7 | permalink: /docs-2/bitbucket-repo/ 8 | redirect_to: https://www.threatdragon.com/docs/configure/bitbucket.html 9 | 10 | --- 11 | -------------------------------------------------------------------------------- /docs-2/usage/config/environment.md: -------------------------------------------------------------------------------- 1 | --- 2 | 3 | title: Configure environment 4 | layout: redirected 5 | tags: threatdragon 6 | document: OWASP Threat Dragon version 2.4 7 | permalink: /docs-2/install-environment/ 8 | redirect_to: https://www.threatdragon.com/docs/configure/configure.html 9 | 10 | --- 11 | -------------------------------------------------------------------------------- /docs-2/usage/config/github.md: -------------------------------------------------------------------------------- 1 | --- 2 | 3 | title: Configure Github access 4 | layout: redirected 5 | tags: threatdragon 6 | document: OWASP Threat Dragon version 2.4 7 | permalink: /docs-2/github-repo/ 8 | redirect_to: https://www.threatdragon.com/docs/configure/github.html 9 | 10 | --- 11 | -------------------------------------------------------------------------------- /docs-2/usage/config/gitlab.md: -------------------------------------------------------------------------------- 1 | --- 2 | 3 | title: Configure GitLab access 4 | layout: redirected 5 | tags: threatdragon 6 | document: OWASP Threat Dragon version 2.4 7 | permalink: /docs-2/gitlab-repo/ 8 | redirect_to: https://www.threatdragon.com/docs/configure/gitlab.html 9 | 10 | --- 11 | -------------------------------------------------------------------------------- /docs-2/usage/config/google.md: -------------------------------------------------------------------------------- 1 | --- 2 | 3 | title: Configure Google Drive access 4 | layout: redirected 5 | tags: threatdragon 6 | document: OWASP Threat Dragon version 2.4 7 | permalink: /docs-2/google-drive/ 8 | redirect_to: https://www.threatdragon.com/docs/configure/google.html 9 | 10 | --- 11 | -------------------------------------------------------------------------------- /docs-2/usage/config/info.md: -------------------------------------------------------------------------------- 1 | {% include navigation.html collection="docs-2" %} 2 | -------------------------------------------------------------------------------- /docs-2/usage/config/local.md: -------------------------------------------------------------------------------- 1 | --- 2 | 3 | title: Configure local access 4 | layout: redirected 5 | tags: threatdragon 6 | document: OWASP Threat Dragon version 2.4 7 | permalink: /docs-2/local-file/ 8 | redirect_to: https://www.threatdragon.com/docs/configure/local.html 9 | 10 | --- 11 | -------------------------------------------------------------------------------- /docs-2/usage/info.md: -------------------------------------------------------------------------------- 1 | {% include navigation.html collection="docs-2" %} 2 | -------------------------------------------------------------------------------- /docs-2/usage/install/desktop.md: -------------------------------------------------------------------------------- 1 | --- 2 | 3 | title: Install Desktop 4 | layout: redirected 5 | tags: threatdragon 6 | document: OWASP Threat Dragon version 2.4 7 | permalink: /docs-2/install-desktop/ 8 | redirect_to: https://www.threatdragon.com/docs/install/desktop.html 9 | 10 | --- 11 | -------------------------------------------------------------------------------- /docs-2/usage/install/docker.md: -------------------------------------------------------------------------------- 1 | --- 2 | 3 | title: Install Docker 4 | layout: redirected 5 | tags: threatdragon 6 | document: OWASP Threat Dragon version 2.4 7 | permalink: /docs-2/install-docker/ 8 | redirect_to: https://www.threatdragon.com/docs/install/docker.html 9 | 10 | --- 11 | -------------------------------------------------------------------------------- /docs-2/usage/install/info.md: -------------------------------------------------------------------------------- 1 | {% include navigation.html collection="docs-2" %} 2 | -------------------------------------------------------------------------------- /docs-2/usage/install/installation.md: -------------------------------------------------------------------------------- 1 | --- 2 | 3 | title: Installation 4 | layout: redirected 5 | tags: threatdragon 6 | document: OWASP Threat Dragon version 2.4 7 | permalink: /docs-2/install-options/ 8 | redirect_to: https://www.threatdragon.com/docs/install/installation.html 9 | 10 | --- 11 | -------------------------------------------------------------------------------- /docs-2/usage/install/web.md: -------------------------------------------------------------------------------- 1 | --- 2 | 3 | title: Install Web Application 4 | layout: redirected 5 | tags: threatdragon 6 | document: OWASP Threat Dragon version 2.4 7 | permalink: /docs-2/install-webapp/ 8 | redirect_to: https://www.threatdragon.com/docs/install/web.html 9 | 10 | --- 11 | -------------------------------------------------------------------------------- /docs-2/usage/modeling/diagrams.md: -------------------------------------------------------------------------------- 1 | --- 2 | 3 | title: Diagrams 4 | layout: redirected 5 | tags: threatdragon 6 | document: OWASP Threat Dragon version 2.4 7 | permalink: /docs-2/diagrams/ 8 | redirect_to: https://www.threatdragon.com/docs/usage/diagrams.html 9 | 10 | --- 11 | -------------------------------------------------------------------------------- /docs-2/usage/modeling/getting-started.md: -------------------------------------------------------------------------------- 1 | --- 2 | 3 | title: Getting started 4 | layout: redirected 5 | tags: threatdragon 6 | document: OWASP Threat Dragon version 2.4 7 | permalink: /docs-2/getting-started/ 8 | redirect_to: https://www.threatdragon.com/docs/usage/getting-started.html 9 | 10 | --- 11 | -------------------------------------------------------------------------------- /docs-2/usage/modeling/info.md: -------------------------------------------------------------------------------- 1 | {% include navigation.html collection="docs-2" %} 2 | -------------------------------------------------------------------------------- /docs-2/usage/modeling/threat-categories.md: -------------------------------------------------------------------------------- 1 | --- 2 | 3 | title: Threat Categories 4 | layout: redirected 5 | tags: threatdragon 6 | document: OWASP Threat Dragon version 2.4 7 | permalink: /docs-2/threat-categories/ 8 | redirect_to: https://www.threatdragon.com/docs/usage/threat-categories.html 9 | 10 | --- 11 | -------------------------------------------------------------------------------- /docs-2/usage/modeling/threats.md: -------------------------------------------------------------------------------- 1 | --- 2 | 3 | title: Threats 4 | layout: redirected 5 | tags: threatdragon 6 | document: OWASP Threat Dragon version 2.4 7 | permalink: /docs-2/threats/ 8 | redirect_to: https://www.threatdragon.com/docs/usage/threats.html 9 | 10 | --- 11 | -------------------------------------------------------------------------------- /index.md: -------------------------------------------------------------------------------- 1 | --- 2 | 3 | layout: col-sidebar 4 | title: OWASP Threat Dragon 5 | tags: threatdragon 6 | project: true 7 | level: 3 8 | type: tool 9 | pitch: OWASP Threat Dragon is a threat modeling tool; great for both developers and defenders alike. Use on your desktop or as a web application. 10 | 11 | --- 12 | 13 | 21 | 22 | ![cupcake logo](/assets/images/cupcake-256x256.png){: .image-right } 23 | 24 | ## What is Threat Dragon? 25 | 26 | OWASP Threat Dragon is a modeling tool used to create threat model diagrams as part of a secure development lifecycle. 27 | Threat Dragon follows the values and principles of the [threat modeling manifesto][manifesto]. 28 | It can be used to record possible threats and decide on their mitigations, as well as giving a visual indication 29 | of the threat model components and threat surfaces. 30 | Threat Dragon runs either as a web application or as a desktop application. 31 | 32 | Threat Dragon supports STRIDE / [LINDDUN](https://www.linddun.org/) / CIA / DIE / [PLOT4ai](https://plot4.ai/), 33 | provides modeling diagrams and implements a rule engine to auto-generate threats and their mitigations. 34 | 35 | ### Resources 36 | 37 | Use the [version 1][docs-1] or [version 2][docs-2] documentation to get started, 38 | along with the recording of Mike Goodwin giving a [lightning demo][demo] 39 | during the OWASP Open Security Summit in June 2020. 40 | 41 | An [introduction](https://www.youtube.com/watch?v=hUOAoc6QGJo) to Threat Dragon is provided by 42 | the [OWASP Spotlight](https://www.youtube.com/playlist?list=PLUKo5k_oSrfOTl27gUmk2o-NBKvkTGw0T) series, 43 | and the [Threat Modeling Gamification](https://www.youtube.com/watch?v=u2tmLrwv-nc) seminar by Vlad Styran 44 | shows how using Threat Dragon can make threat modeling fun. 45 | 46 | There are a couple of OWASP community pages that give overviews on Threat Modeling and how to get started: 47 | [Threat Modeling](https://owasp.org/www-community/Threat_Modeling) 48 | and [Threat Modeling Process](https://owasp.org/www-community/Threat_Modeling_Process). 49 | 50 | The easiest way to get in contact with the Threat Dragon community is via the OWASP Slack 51 | [#project-threat-dragon](https://owasp.slack.com/messages/CURE8PQ68) project channel, 52 | you may need to [subscribe](https://owasp.org/slack/invite) first. 53 | 54 | ### Related Projects 55 | 56 | * [OWASP pytm (Pythonic Threat Modeling)][pytm] 57 | * [Threat Modeling OWASP Cheat Sheet][tmcs] 58 | * [Threagile - Agile Threat Modeling][threagile], an (non-OWASP) open source project 59 | 60 | ---- 61 | 62 | Threat Dragon: _making threat modeling less threatening_ 63 | 64 | [demo]: https://youtu.be/n6JGcZGFq5o 65 | [docs-1]: https://threatdragon.github.io/ 66 | [docs-2]: https://www.threatdragon.com/docs/ 67 | [manifesto]: https://www.threatmodelingmanifesto.org/ 68 | [pytm]: https://owasp.org/www-project-pytm/ 69 | [threagile]: https://threagile.io 70 | [tmcs]: https://cheatsheetseries.owasp.org/cheatsheets/Threat_Modeling_Cheat_Sheet.html 71 | -------------------------------------------------------------------------------- /info.md: -------------------------------------------------------------------------------- 1 | ### Classification 2 | 3 | * Lab Project 4 | * Tool 5 | 6 | ### Audience 7 | 8 | * Builder 9 | * Defender 10 | 11 | ### Documentation 12 | 13 | * [Version 1.6.x](https://threatdragon.github.io/) 14 | * [Version 2.x](https://www.threatdragon.com/docs/) 15 | * [Demonstration](https://www.threatdragon.com/) 16 | 17 | ### Downloads 18 | 19 | * Single page [web application](https://github.com/OWASP/threat-dragon/releases/tag/v2.4.1) 20 | * Docker [image](https://hub.docker.com/r/owasp/threat-dragon/tags?page=1&ordering=name) 21 | * Desktop installers for: 22 | * [Linux / MacOS / Windows](https://github.com/OWASP/threat-dragon/releases/tag/v2.4.1) 23 | 24 | ### Source 25 | 26 | * Threat Dragon [github repo](https://github.com/OWASP/threat-dragon) 27 | 28 | ### Licensing 29 | 30 | * [Apache 2 License](https://www.apache.org/licenses/LICENSE-2.0) 31 | -------------------------------------------------------------------------------- /leaders.md: -------------------------------------------------------------------------------- 1 | ### Leaders 2 | 3 | * [Mike Goodwin](mailto:mike.goodwin@owasp.org) 4 | * [Jon Gadsden](mailto:jon.gadsden@owasp.org) 5 | * [Leo Reading](mailto:leo.reading@owasp.org) 6 | 7 | ### Main Contributors 8 | 9 | * [Mohamed El-Bohy](https://github.com/mohamedselbohy) 10 | -------------------------------------------------------------------------------- /license.txt: -------------------------------------------------------------------------------- 1 | Apache License 2 | Version 2.0, January 2004 3 | http://www.apache.org/licenses/ 4 | 5 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 6 | 7 | 1. Definitions. 8 | 9 | "License" shall mean the terms and conditions for use, reproduction, 10 | and distribution as defined by Sections 1 through 9 of this document. 11 | 12 | "Licensor" shall mean the copyright owner or entity authorized by 13 | the copyright owner that is granting the License. 14 | 15 | "Legal Entity" shall mean the union of the acting entity and all 16 | other entities that control, are controlled by, or are under common 17 | control with that entity. For the purposes of this definition, 18 | "control" means (i) the power, direct or indirect, to cause the 19 | direction or management of such entity, whether by contract or 20 | otherwise, or (ii) ownership of fifty percent (50%) or more of the 21 | outstanding shares, or (iii) beneficial ownership of such entity. 22 | 23 | "You" (or "Your") shall mean an individual or Legal Entity 24 | exercising permissions granted by this License. 25 | 26 | "Source" form shall mean the preferred form for making modifications, 27 | including but not limited to software source code, documentation 28 | source, and configuration files. 29 | 30 | "Object" form shall mean any form resulting from mechanical 31 | transformation or translation of a Source form, including but 32 | not limited to compiled object code, generated documentation, 33 | and conversions to other media types. 34 | 35 | "Work" shall mean the work of authorship, whether in Source or 36 | Object form, made available under the License, as indicated by a 37 | copyright notice that is included in or attached to the work 38 | (an example is provided in the Appendix below). 39 | 40 | "Derivative Works" shall mean any work, whether in Source or Object 41 | form, that is based on (or derived from) the Work and for which the 42 | editorial revisions, annotations, elaborations, or other modifications 43 | represent, as a whole, an original work of authorship. For the purposes 44 | of this License, Derivative Works shall not include works that remain 45 | separable from, or merely link (or bind by name) to the interfaces of, 46 | the Work and Derivative Works thereof. 47 | 48 | "Contribution" shall mean any work of authorship, including 49 | the original version of the Work and any modifications or additions 50 | to that Work or Derivative Works thereof, that is intentionally 51 | submitted to Licensor for inclusion in the Work by the copyright owner 52 | or by an individual or Legal Entity authorized to submit on behalf of 53 | the copyright owner. For the purposes of this definition, "submitted" 54 | means any form of electronic, verbal, or written communication sent 55 | to the Licensor or its representatives, including but not limited to 56 | communication on electronic mailing lists, source code control systems, 57 | and issue tracking systems that are managed by, or on behalf of, the 58 | Licensor for the purpose of discussing and improving the Work, but 59 | excluding communication that is conspicuously marked or otherwise 60 | designated in writing by the copyright owner as "Not a Contribution." 61 | 62 | "Contributor" shall mean Licensor and any individual or Legal Entity 63 | on behalf of whom a Contribution has been received by Licensor and 64 | subsequently incorporated within the Work. 65 | 66 | 2. Grant of Copyright License. Subject to the terms and conditions of 67 | this License, each Contributor hereby grants to You a perpetual, 68 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 69 | copyright license to reproduce, prepare Derivative Works of, 70 | publicly display, publicly perform, sublicense, and distribute the 71 | Work and such Derivative Works in Source or Object form. 72 | 73 | 3. Grant of Patent License. Subject to the terms and conditions of 74 | this License, each Contributor hereby grants to You a perpetual, 75 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 76 | (except as stated in this section) patent license to make, have made, 77 | use, offer to sell, sell, import, and otherwise transfer the Work, 78 | where such license applies only to those patent claims licensable 79 | by such Contributor that are necessarily infringed by their 80 | Contribution(s) alone or by combination of their Contribution(s) 81 | with the Work to which such Contribution(s) was submitted. If You 82 | institute patent litigation against any entity (including a 83 | cross-claim or counterclaim in a lawsuit) alleging that the Work 84 | or a Contribution incorporated within the Work constitutes direct 85 | or contributory patent infringement, then any patent licenses 86 | granted to You under this License for that Work shall terminate 87 | as of the date such litigation is filed. 88 | 89 | 4. Redistribution. You may reproduce and distribute copies of the 90 | Work or Derivative Works thereof in any medium, with or without 91 | modifications, and in Source or Object form, provided that You 92 | meet the following conditions: 93 | 94 | (a) You must give any other recipients of the Work or 95 | Derivative Works a copy of this License; and 96 | 97 | (b) You must cause any modified files to carry prominent notices 98 | stating that You changed the files; and 99 | 100 | (c) You must retain, in the Source form of any Derivative Works 101 | that You distribute, all copyright, patent, trademark, and 102 | attribution notices from the Source form of the Work, 103 | excluding those notices that do not pertain to any part of 104 | the Derivative Works; and 105 | 106 | (d) If the Work includes a "NOTICE" text file as part of its 107 | distribution, then any Derivative Works that You distribute must 108 | include a readable copy of the attribution notices contained 109 | within such NOTICE file, excluding those notices that do not 110 | pertain to any part of the Derivative Works, in at least one 111 | of the following places: within a NOTICE text file distributed 112 | as part of the Derivative Works; within the Source form or 113 | documentation, if provided along with the Derivative Works; or, 114 | within a display generated by the Derivative Works, if and 115 | wherever such third-party notices normally appear. The contents 116 | of the NOTICE file are for informational purposes only and 117 | do not modify the License. You may add Your own attribution 118 | notices within Derivative Works that You distribute, alongside 119 | or as an addendum to the NOTICE text from the Work, provided 120 | that such additional attribution notices cannot be construed 121 | as modifying the License. 122 | 123 | You may add Your own copyright statement to Your modifications and 124 | may provide additional or different license terms and conditions 125 | for use, reproduction, or distribution of Your modifications, or 126 | for any such Derivative Works as a whole, provided Your use, 127 | reproduction, and distribution of the Work otherwise complies with 128 | the conditions stated in this License. 129 | 130 | 5. Submission of Contributions. Unless You explicitly state otherwise, 131 | any Contribution intentionally submitted for inclusion in the Work 132 | by You to the Licensor shall be under the terms and conditions of 133 | this License, without any additional terms or conditions. 134 | Notwithstanding the above, nothing herein shall supersede or modify 135 | the terms of any separate license agreement you may have executed 136 | with Licensor regarding such Contributions. 137 | 138 | 6. Trademarks. This License does not grant permission to use the trade 139 | names, trademarks, service marks, or product names of the Licensor, 140 | except as required for reasonable and customary use in describing the 141 | origin of the Work and reproducing the content of the NOTICE file. 142 | 143 | 7. Disclaimer of Warranty. Unless required by applicable law or 144 | agreed to in writing, Licensor provides the Work (and each 145 | Contributor provides its Contributions) on an "AS IS" BASIS, 146 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 147 | implied, including, without limitation, any warranties or conditions 148 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A 149 | PARTICULAR PURPOSE. You are solely responsible for determining the 150 | appropriateness of using or redistributing the Work and assume any 151 | risks associated with Your exercise of permissions under this License. 152 | 153 | 8. Limitation of Liability. In no event and under no legal theory, 154 | whether in tort (including negligence), contract, or otherwise, 155 | unless required by applicable law (such as deliberate and grossly 156 | negligent acts) or agreed to in writing, shall any Contributor be 157 | liable to You for damages, including any direct, indirect, special, 158 | incidental, or consequential damages of any character arising as a 159 | result of this License or out of the use or inability to use the 160 | Work (including but not limited to damages for loss of goodwill, 161 | work stoppage, computer failure or malfunction, or any and all 162 | other commercial damages or losses), even if such Contributor 163 | has been advised of the possibility of such damages. 164 | 165 | 9. Accepting Warranty or Additional Liability. While redistributing 166 | the Work or Derivative Works thereof, You may choose to offer, 167 | and charge a fee for, acceptance of support, warranty, indemnity, 168 | or other liability obligations and/or rights consistent with this 169 | License. However, in accepting such obligations, You may act only 170 | on Your own behalf and on Your sole responsibility, not on behalf 171 | of any other Contributor, and only if You agree to indemnify, 172 | defend, and hold each Contributor harmless for any liability 173 | incurred by, or claims asserted against, such Contributor by reason 174 | of your accepting any such warranty or additional liability. 175 | 176 | END OF TERMS AND CONDITIONS 177 | 178 | APPENDIX: How to apply the Apache License to your work. 179 | 180 | To apply the Apache License to your work, attach the following 181 | boilerplate notice, with the fields enclosed by brackets "{}" 182 | replaced with your own identifying information. (Don't include 183 | the brackets!) The text should be enclosed in the appropriate 184 | comment syntax for the file format. We also recommend that a 185 | file or class name and description of purpose be included on the 186 | same "printed page" as the copyright notice for easier 187 | identification within third-party archives. 188 | 189 | Copyright 2017 Mike Goodwin 190 | 191 | Licensed under the Apache License, Version 2.0 (the "License"); 192 | you may not use this file except in compliance with the License. 193 | You may obtain a copy of the License at 194 | 195 | http://www.apache.org/licenses/LICENSE-2.0 196 | 197 | Unless required by applicable law or agreed to in writing, software 198 | distributed under the License is distributed on an "AS IS" BASIS, 199 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 200 | See the License for the specific language governing permissions and 201 | limitations under the License. 202 | 203 | -------------------------------------------------------------------------------- /security.md: -------------------------------------------------------------------------------- 1 | ## Security Policy 2 | 3 | It is not impossible that a malicious actor could somehow embed malware in the markdown 4 | or subvert the scripts for this project. 5 | If you find anything suspicious in this Threat Dragon site then please let us know ASAP 6 | and we will fix it as a priority. 7 | 8 | Open a [security advisory][advisory] and this will be provided 9 | only to the project's admins and in strict confidence. 10 | 11 | [advisory]: https://github.com/OWASP/www-project-threat-dragon/security/advisories/new 12 | -------------------------------------------------------------------------------- /tab_faqs.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Faqs 3 | displaytext: FAQs 4 | layout: null 5 | tab: true 6 | order: 2 7 | tags: threatdragon 8 | --- 9 | 10 | ## FAQs 11 | 12 | * [Where are the arrows that allow me to create data flows?](https://github.com/OWASP/threat-dragon/wiki/FAQs#where-are-the-arrows-that-allow-me-to-create-dataflows) 13 | 14 | * [Why do the earlier releases come from Mike Goodwin's repo, not the OWASP repo?](https://github.com/OWASP/threat-dragon/wiki/FAQs#why-do-the-earlier-releases-come-from-mike-goodwins-repo-not-the-owasp-repo) 15 | 16 | * [I get failures when installing from source code](https://github.com/OWASP/threat-dragon/wiki/FAQs#i-get-failures-when-installing-from-source-code) 17 | 18 | * [I get a failure when printing a report](https://github.com/OWASP/threat-dragon/wiki/FAQs#i-get-a-failure-when-printing-a-report) 19 | 20 | * [Why do I get 'OWASP-Threat-Dragon-Setup isn't commonly downloaded' warnings after downloading on Windows?](https://github.com/OWASP/threat-dragon/wiki/FAQs#why-do-i-get-owasp-threat-dragon-setup-isnt-commonly-downloaded-warnings-after-downloading-on-windows) 21 | 22 | * [Why do I get 'Apple cannot check it for malicious software' errors after installing on MacOS?](https://github.com/OWASP/threat-dragon/wiki/FAQs#why-do-i-get-developer-can-not-be-verified-errors-after-installing-on-macos) 23 | 24 | * [Why do I get 'Permissions failure opening Mac desktop app' when installing from the zip file?](https://github.com/OWASP/threat-dragon/wiki/FAQs#why-do-i-get-permissions-failure-opening-mac-desktop-app-when-installing-from-the-zip-file) 25 | 26 | * [Why do I get 'developer can not be verified' errors after installing on MacOS?](https://github.com/OWASP/threat-dragon/wiki/FAQs#why-do-i-get-developer-can-not-be-verified-errors-after-installing-on-macos) 27 | 28 | * [Can I run Threat Dragon Desktop from a command line?](https://github.com/OWASP/threat-dragon/wiki/FAQs#can-i-run-threat-dragon-desktop-from-a-command-line) 29 | 30 | * [Is there a command line interface for Threat Dragon Desktop?](https://github.com/OWASP/threat-dragon/wiki/FAQs#is-there-a-command-line-interface-for-threat-dragon-desktop) 31 | 32 | * [What browsers can be used for Threat Dragon?](https://github.com/OWASP/threat-dragon/wiki/FAQs#what-browsers-can-be-used-for-threat-dragon) 33 | 34 | * [Hold on...isn't this the same as Mozilla's SeaSponge?](https://github.com/OWASP/threat-dragon/wiki/FAQs#hold-onisnt-this-the-same-as-mozillas-seasponge) 35 | 36 | * [When is Threat Dragon's birthday? And does Threat Dragon have a theme tune?](https://github.com/OWASP/threat-dragon/wiki/FAQs#when-is-threat-dragons-birthday-and-does-threat-dragon-have-a-theme-tune) 37 | 38 | ---- 39 | 40 | Threat Dragon: _making threat modeling less threatening_ 41 | -------------------------------------------------------------------------------- /tab_releases.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Releases 3 | layout: null 4 | tab: true 5 | order: 1 6 | tags: threatdragon 7 | --- 8 | 9 | ## Releases 10 | 11 | Release | Date | Location | Comments 12 | ------- | ---- | -------- | -------- 13 | v2.4.1 | Mar 2025 | [github][241] | Bug fix for diagram labels, TBA renamed TBD 14 | v2.4 | Mar 2025 | [github][240] | Additional threat priorities, TLS credentials, export model diagrams, create new repo branches 15 | v2.3 | Dec 2024 | [github][230] | suggest threats by element and threats by context, builds for ARM64 platforms and google sign-in feature 16 | v2.2 | Feb 2024 | [github][220] | add GitLab support and user prompt to save model when quitting 17 | v2.1.3 | Jan 2024 | [github][213] | bug fix for desktop menu discarding diagram edits, add schema for Open Threat Modeling (OTM) 18 | v2.1.2 | Nov 2023 | [github][212] | add Bitbucket access, PLOT4ai threats and bug-fix for data-flows overwriting properties 19 | v2.1.1 | Oct 2023 | [github][211] | desktop version provides guard advising of overwriting threats changes 20 | v2.1 | Oct 2023 | [github][210] | desktop version provides guard advising of overwriting diagram changes 21 | v2.0.9 | Oct 2023 | [github][209] | names for diagram data flow and trust boundary curves preserved when unselected 22 | v2.0.8 | Oct 2023 | [github][208] | diagram component properties correctly displayed when selecting new component 23 | v2.0.7 | Sep 2023 | [github][207] | fix bug when selecting trust boundary curves 24 | v2.0.6 | Sep 2023 | [github][206] | ability to filter Github repos; translation for Finnish; improve data flow selection and handling 25 | v2.0.4 | Aug 2023 | [github][204] | various bug fixes; 26 | v2.0.2 | Apr 2023 | [github][202] | collection of bug fixes; PDF report button, threat IDs fixed, reporting expanded 27 | v2.0 | Feb 2023 | [github][200] | substantial rewrite for new drawing library [@antv/g6][ant] 28 | v1.6.1 | Mar 2022 | [github][161] | Docs now moved to the new site
Last release of 1.x before version 2.0 29 | v1.6 | Dec 2021 | [github][160] | Automated threat and context threat generation 30 | v1.5.8 | Sep 2021 | [github][158] | Shows 'NA' threats as completed/ mitigated
Fixes bug in threat engine (web app only)
Signed binaries for Windows 31 | v1.5.5 | Sep 2021 | [github][155] | MacOS images are signed and notarized
Linux Snap image available as [snapcraft distribution][snap] 32 | v1.4 | 5 May 2021 | [github][140] | Provides dotenv for environment variables
updates to docker image
substantial code reorganisation 33 | v1.3.1 | 26 Oct 2020 | [Web app][131]
[Desktop][131-desk] | update documentation link to point to new docs page 34 | v1.3 | 3 Sep 2020 | [Web app][130]
[Desktop][130-desk] | support for LINDDUN and CIA as well as STRIDE
and desktop command line interface 35 | v1.2 | 14 Apr 2020 | [Web app][120]
[Desktop][120-desk] | description for diagram elements
label applied to boundaries
save button always enabled
zoom functionality disabled
hot key copy and paste for diagram elements 36 | v1.1 | 15 Mar 2020 | [Web app][110] | Duplicate element/diagram feature 37 | v1.1 | 10 Mar 2020 | [Desktop][110-desk] | Bug fix for blank screen on new model,
and duplicate element/diagram feature 38 | v1.0 | 22 Feb 2020 | [Desktop][100-desk] | First full desktop release for Windows, MacOS and Linux 39 | v0.1.27-alpha | 28 Jul 2019 | [Desktop][0127-desk] | Windows desktop only 40 | v0.1.26 | 16 May 2017 | [Desktop][0126-desk] | MacOS and Windows desktop only 41 | 0.3.0 | 14 Mar 2017 | [Web app][030] | alpha release 42 | v0.1.1-alpha | 14 Mar 2016 | [Web app][011] | alpha release 43 | 44 | ---- 45 | 46 | Threat Dragon: _making threat modeling less threatening_ 47 | 48 | [011]: https://github.com/mike-goodwin/owasp-threat-dragon/releases/tag/v0.1.1-alpha 49 | [030]: https://github.com/mike-goodwin/owasp-threat-dragon/releases/tag/0.3.0 50 | [0126-desk]: https://github.com/mike-goodwin/owasp-threat-dragon-desktop/releases/tag/0.1.26 51 | [0127-desk]: https://github.com/mike-goodwin/owasp-threat-dragon-desktop/releases/tag/0.1.27 52 | [100-desk]: https://github.com/mike-goodwin/owasp-threat-dragon-desktop/releases/tag/v1.0 53 | [110]: https://github.com/mike-goodwin/owasp-threat-dragon/releases/tag/v1.1 54 | [110-desk]: https://github.com/mike-goodwin/owasp-threat-dragon-desktop/releases/tag/v1.1 55 | [120]: https://github.com/mike-goodwin/owasp-threat-dragon/releases/tag/v1.2 56 | [120-desk]: https://github.com/mike-goodwin/owasp-threat-dragon-desktop/releases/tag/v1.2 57 | [130]: https://github.com/OWASP/threat-dragon/releases/tag/v1.3 58 | [130-desk]: https://github.com/OWASP/threat-dragon-desktop/releases/tag/v1.3 59 | [131]: https://github.com/OWASP/threat-dragon/releases/tag/v1.3.1 60 | [131-desk]: https://github.com/OWASP/threat-dragon-desktop/releases/tag/v1.3.1 61 | [140]: https://github.com/OWASP/threat-dragon/releases/tag/v1.4.0 62 | [155]: https://github.com/OWASP/threat-dragon/releases/tag/v1.5.5 63 | [158]: https://github.com/OWASP/threat-dragon/releases/tag/v1.5.8 64 | [160]: https://github.com/OWASP/threat-dragon/releases/tag/v1.6.0 65 | [161]: https://github.com/OWASP/threat-dragon/releases/tag/v1.6.1 66 | [200]: https://github.com/OWASP/threat-dragon/releases/tag/v2.0.0 67 | [202]: https://github.com/OWASP/threat-dragon/releases/tag/v2.0.2 68 | [204]: https://github.com/OWASP/threat-dragon/releases/tag/v2.0.4 69 | [206]: https://github.com/OWASP/threat-dragon/releases/tag/v2.0.6 70 | [207]: https://github.com/OWASP/threat-dragon/releases/tag/v2.0.7 71 | [208]: https://github.com/OWASP/threat-dragon/releases/tag/v2.0.8 72 | [209]: https://github.com/OWASP/threat-dragon/releases/tag/v2.0.9 73 | [210]: https://github.com/OWASP/threat-dragon/releases/tag/v2.1.0 74 | [211]: https://github.com/OWASP/threat-dragon/releases/tag/v2.1.1 75 | [212]: https://github.com/OWASP/threat-dragon/releases/tag/v2.1.2 76 | [213]: https://github.com/OWASP/threat-dragon/releases/tag/v2.1.3 77 | [220]: https://github.com/OWASP/threat-dragon/releases/tag/v2.2.0 78 | [230]: https://github.com/OWASP/threat-dragon/releases/tag/v2.3.0 79 | [240]: https://github.com/OWASP/threat-dragon/releases/tag/v2.4.0 80 | [241]: https://github.com/OWASP/threat-dragon/releases/tag/v2.4.1 81 | [ant]: https://www.npmjs.com/package/@antv/g6 82 | [snap]: https://snapcraft.io/threat-dragon 83 | -------------------------------------------------------------------------------- /tab_roadmap.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Roadmap 3 | layout: null 4 | tab: true 5 | order: 3 6 | tags: threatdragon 7 | --- 8 | 9 | ### Version 2.5: in progress 10 | 11 | - [ ] provide an API for CI/CD pipelines 12 | - [ ] provide a CLI for scripting based on TD's existing [use of yargs](https://github.com/yargs/yargs) 13 | 14 | ### Version 2.3: released December 2024 15 | 16 | - [x] automated threats (both by element and by OATS) 17 | 18 | ### Version 2.2: released February 2024 19 | 20 | Threat model access for web app: 21 | 22 | - [x] load models from various repos : 23 | - [x] github enterprise 24 | - [x] gitlab 25 | - [x] github enterprise 26 | - [x] BitBucket 27 | 28 | ### Version 2.1: released October 2023 29 | 30 | Stable version of 2.x.x with bug fixes and usable diagram tools. Still not feature complete: 31 | 32 | - missing CLI for scripting based 33 | - missing automated threats (both by element and by OATS) 34 | 35 | ### Version 2.0: released February 2023 36 | 37 | **migrate to a combined application for both desktop and webapp**: 38 | 39 | - [x] be strictly open source 40 | - [x] use [Vue](https://v3.vuejs.org/guide/introduction.html#what-is-vue-js) for frontend application 41 | - [x] use [@antv/g6](https://www.npmjs.com/package/@antv/g6) for the drawing library 42 | - [x] frontend logging using [bunyan](https://github.com/trentm/node-bunyan) 43 | and optional logging to the console during development 44 | - [x] use [electron](https://www.electronjs.org/) to wrap webapp for desktop 45 | - [X] provide auto-update using [electron](https://www.electronjs.org/) 46 | - [X] expand electron unit tests using 47 | [WDIO Electron Service](https://github.com/webdriverio-community/wdio-electron-service) 48 | - [x] webapp unit test framework [Jest](https://jestjs.io/) 49 | - [x] component test [Vue testing library](https://github.com/testing-library/vue-testing-library) 50 | - [x] end-to-end test [cypress](https://github.com/cypress-io/cypress) 51 | - [x] set up ZAP to provide security testing on commit 52 | - [x] design files are to be backwardly compatible to Threat Dragon json 53 | 54 | **demonstration pages**: 55 | 56 | - [x] an online demonstration to be provided on [threat dragon's site](https://www.threatdragon.com) 57 | - [x] demo should either be a snapshot or a release version 58 | 59 | ### Version 1.4: released May 2021 60 | 61 | - [x] written in javascript ES6 / ECMAScript 2015 or compatible 62 | - [x] run on [node.js](https://nodejs.org/en/) server 63 | - [x] use [express](http://expressjs.com/en/starter/installing.html) for backend application 64 | - [x] provide a dockerfile for running in docker, 65 | similar to [existing TD](https://github.com/OWASP/threat-dragon/blob/main/Dockerfile) 66 | - [x] static code analysis using [ESLint](https://eslint.org) 67 | - [x] webapp test runner [Karma](http://karma-runner.github.io/6.3/intro/installation.html) 68 | with [Jasmine](https://jasmine.github.io) 69 | for [Vue Test Utils](https://vue-test-utils.vuejs.org/installation/#using-other-test-runners) 70 | - [x] backend unit test framework 71 | [MochaJS](https://mochajs.org) and assertions from [chai](https://github.com/chaijs/chai) 72 | - [x] bundle the application and api for production using [webpack](https://webpack.js.org/) 73 | - [x] be strictly open source, avoiding using languages or frameworks maintained outside the open source community 74 | 75 | **documentation**: 76 | 77 | - [x] documentation should be updated at the [threat dragon github pages](https://threatdragon.github.io/) 78 | - [x] version 1.x docs are preserved and migrated to version 2.0 79 | - [x] docs should be static pages based on [Jekyll](https://jekyllrb.com) and markdown 80 | 81 | ### Previous versions 82 | 83 | Mike Goodwin's initial roadmap for the project is 84 | [archived here](https://github.com/OWASP/www-project-threat-dragon/wiki/Original-Roadmap). 85 | The original roadmap had various milestones, most of which were achieved by late 2020. 86 | 87 | **Milestone 4**: Dev lifecycle integration 88 | 89 | - Some CLI interface available mid 2020 90 | 91 | **Milestone 3**: Release 1.0 92 | 93 | - production version released February 2020 94 | - version 1.3.1 released October 2020 95 | 96 | **Milestone 2**: Beta release: Threat/mitigation rule engine 97 | 98 | - achieved May 2017 with version 0.1.26 99 | 100 | **Milestone 1**: Alpha release - Basic threat modelling experience 101 | 102 | - achieved October 2015 103 | 104 | ---- 105 | 106 | Threat Dragon: _making threat modeling less threatening_ 107 | -------------------------------------------------------------------------------- /tab_tmf.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: TMF 3 | layout: null 4 | tab: true 5 | order: 4 6 | tags: threatdragon 7 | --- 8 | 9 | ### Threat Model File (TMF) format 10 | 11 | Threat Dragon version 1.x and Threat Dragon version 2.x use closely related but incompatible JSON file formats. 12 | In addition both these file formats are arranged around diagram elements used by the graph editing engines: 13 | JointJS for version 1.x and AntV/X6 for version2.x. 14 | The data model use in the Threat Dragon file format would be better centred round threat model information 15 | rather than the data used for the graph editing. 16 | 17 | Both Threat Dragon file formats are incompatible with other open source Threat Modeling files 18 | such as pytm, Threagile and Open Threat Model. 19 | 20 | The intention is to change the model file format in Threat Dragon version 3.x onwards. 21 | The goal will be to define a schema that is flexible enough to easily convert from the existing: 22 | 23 | * OWASP Threat Dragon versions 1.x and 2.x 24 | * [OWASP pytm][pytm] pythonic threat modeling 25 | * [Threagile][threagile] open-source toolkit for agile threat modeling 26 | * [Open Threat Model][otm] (OTM) file format 27 | 28 | There is an [open discussion][discussion] for suggestions and debate on this subject. 29 | 30 | [discussion]: https://github.com/OWASP/threat-dragon/discussions/1152 31 | [otm]: https://github.com/iriusrisk/OpenThreatModel 32 | [pytm]: https://owasp.org/www-project-pytm/ 33 | [threagile]: https://threagile.io 34 | --------------------------------------------------------------------------------