Atlassian JIRA
Create JIRA Issue
The purpose of this example is to create a JIRA Issue when a Vulnerability is created in AttackForge, and to update AttackForge to assign the JIRA Issue Key against the Vulnerability.
This example Flow can be downloaded from our Flows GitHub Repository and imported into your AttackForge.
Initial Set Up
Important: This example requires access to the AttackForge Self-Service API and AttackForge Flows
Event: Vulnerability Created
Secrets:
af_auth - your AttackForge Self-Service API token.
jira_auth - your JIRA API token
Action 1 - Create JIRA Issue
Method: POST
URL: https://<YOUR-JIRA>/rest/api/2/issue
Headers:
Key = Accept; Type = Value; Value = application/json
Key = Content-Type; Type = Value; Value = application/json
Key = Authorization; Type = Secret; Value = jira_auth
Request Script:
Response Script:
Action 2 - Update AF Vuln with JIRA Issue Key
Method: PUT
URL: <defined in Request Script>
Headers:
Key = Content-Type; Type = Value; Value = application/json
Key = X-SSAPI-Key; Type = Secret; Value = af_auth
Request Script:
Response Script:
Update JIRA Issue
The purpose of this example is to update a JIRA Issue when a Vulnerability is updated in AttackForge.
This example Flow can be downloaded from our Flows GitHub Repository and imported into your AttackForge.
Initial Set Up
Event: Vulnerability Updated
Secrets:
jira_auth - your JIRA API token
Action 1 - Get JIRA Issue
Method: GET
URL: <defined in Request Script>
Headers:
Key = Accept; Type = Value; Value = application/json
Key = Content-Type; Type = Value; Value = application/json
Key = Authorization; Type = Secret; Value = jira_auth
Request Script:
Response Script:
Action 2 - Update JIRA Issue
Method: <defined in Request Script>
URL: <defined in Request Script>
Headers:
<defined in Request Script>
Request Script:
Response Script:
JIRA Issue Retest -> Update Vuln to Ready for Retest
The purpose of this example is when a JIRA Issue is assigned the 'Retest' status - the matching vulnerability in AttackForge is also assigned as retest.

This example Flow can be downloaded from our Flows GitHub Repository and imported into your AttackForge.
Initial Set Up
JIRA WebHooks
Configure 'Issue Updated' web hook from https://<your-jira-tenant>.atlassian.net/plugins/servlet/webhooks#
HTTP Trigger
Method: POST
Authentication: None
Secrets:
jira_webhook_secret - your JIRA WebHook secret
jira_api_key - your JIRA API Key
x_user_key - your AttackForge Self-Service API token.
Action 1 - Get Vulnerability
Method: GET
URL: https://demo.attackforge.dev/api/ss/vulnerabilities
Headers:
Key = Content-Type; Type = Value; Value = application/json
Key = X-SSAPI-KEY; Type = Secret; Value = x_user_key
Request Script:
Response Script:
Action 2 - Update Vulnerability
Method: PUT
URL: https://demo.attackforge.dev/api/ss/vulnerability/{id}
Headers:
Key = Content-Type; Type = Value; Value = application/json
Key = X-SSAPI-KEY; Type = Secret; Value = x_user_key
Request Script:
Response Script:
Close JIRA Issue
The purpose of this example is when a vulnerability is closed in AttackForge, the matching JIRA Issue is also closed.

This example Flow can be downloaded from our Flows GitHub Repository and imported into your AttackForge.
Initial Set Up
Important: This example requires access to the AttackForge Self-Service API and AttackForge Flows
Event: Vulnerability Updated
Secrets:
jira_api_key - your JIRA API Key
Action 1 - Get JIRA Issue
Method: GET
URL: https://cybersechub.atlassian.net/rest/api/3/issue/{issueIdOrKey}
Headers:
Key = Content-Type; Type = Value; Value = application/json
Key = Accept; Type = Value; Value = application/json
Key = Authorization; Type = Secret; Value = jira_api_key
Request Script:
Response Script:
Action 2 - Get JIRA Transitions
Method: GET
URL: https://cybersechub.atlassian.net/rest/api/2/issue/{issueIdOrKey}/transitions
Headers:
Key = Content-Type; Type = Value; Value = application/json
Key = Accept; Type = Value; Value = application/json
Key = Authorization; Type = Secret; Value = jira_api_key
Request Script:
Response Script:
Action 3 - Close JIRA Issue
Method: POST
URL: https://cybersechub.atlassian.net/rest/api/2/issue/{issueIdOrKey}/transitions
Headers:
Key = Content-Type; Type = Value; Value = application/json
Key = Accept; Type = Value; Value = application/json
Key = Authorization; Type = Secret; Value = jira_api_key
Request Script:
Response Script:
Re-Open JIRA Issue
The purpose of this example is when a vulnerability is re-opened in AttackForge, the matching JIRA Issue is also re-opened.

This example Flow can be downloaded from our Flows GitHub Repository and imported into your AttackForge.
Initial Set Up
Important: This example requires access to the AttackForge Self-Service API and AttackForge Flows
Event: Vulnerability Updated
Secrets:
jira_api_key - your JIRA API Key
Action 1 - Get JIRA Issue
Method: GET
URL: https://cybersechub.atlassian.net/rest/api/3/issue/{issueIdOrKey}
Headers:
Key = Content-Type; Type = Value; Value = application/json
Key = Accept; Type = Value; Value = application/json
Key = Authorization; Type = Secret; Value = jira_api_key
Request Script:
Response Script:
Action 2 - Get JIRA Transitions
Method: GET
URL: https://cybersechub.atlassian.net/rest/api/2/issue/{issueIdOrKey}/transitions
Headers:
Key = Content-Type; Type = Value; Value = application/json
Key = Accept; Type = Value; Value = application/json
Key = Authorization; Type = Secret; Value = jira_api_key
Request Script:
Response Script:
Action 3 - Re-Open JIRA Issue
Method: POST
URL: https://cybersechub.atlassian.net/rest/api/2/issue/{issueIdOrKey}/transitions
Headers:
Key = Content-Type; Type = Value; Value = application/json
Key = Accept; Type = Value; Value = application/json
Key = Authorization; Type = Secret; Value = jira_api_key
Request Script:
Response Script:
JIRA Issue Comment Created -> Create Vuln Remediation Note
The purpose of this example is when a comment is created on a JIRA Issue, a remediation note is created on the matching vulnerability.

This example Flow can be downloaded from our Flows GitHub Repository and imported into your AttackForge.
Initial Set Up
JIRA WebHooks
Configure 'Issue Comment Created' web hook from https://<your-jira-tenant>.atlassian.net/plugins/servlet/webhooks#
HTTP Trigger
Method: POST
Authentication: None
Secrets:
x_user_key - your AttackForge Self-Service API token.
Action 1 - Get Vulnerability
Method: GET
URL: https://demo.attackforge.dev/api/ss/vulnerabilities
Headers:
Key = Content-Type; Type = Value; Value = application/json
Key = X-SSAPI-KEY; Type = Secret; Value = x_user_key
Request Script:
Response Script:
Action 2 - Create Remediation Note
Method: POST
URL: https://demo.attackforge.dev/api/ss/vulnerability/{id}/remediationNote
Headers:
Key = Content-Type; Type = Value; Value = application/json
Key = X-SSAPI-KEY; Type = Secret; Value = x_user_key
Request Script:
Response Script:
Create JIRA Issue Comment
The purpose of this example is when a remediation note is created on a vulnerability, a comment is also created on the matching JIRA Issue.

This example Flow can be downloaded from our Flows GitHub Repository and imported into your AttackForge.
Initial Set Up
Important: This example requires access to the AttackForge Self-Service API and AttackForge Flows
Event: Vulnerability Remediation Note Created
Secrets:
x_user_key - your AttackForge Self-Service API token
jira_api_key - your JIRA API Key
Action 1 - Get Vulnerability
Method: GET
URL: https://demo.attackforge.dev/api/ss/vulnerability/{id}
Headers:
Key = Content-Type; Type = Value; Value = application/json
Key = X-SSAPI-KEY; Type = Secret; Value = x_user_key
Request Script:
Response Script:
Action 2 - Get JIRA Comments
Method: GET
URL: https://cybersechub.atlassian.net/rest/api/2/issue/{issueIdOrKey}/comment
Headers:
Key = Content-Type; Type = Value; Value = application/json
Key = Accept; Type = Value; Value = application/json
Key = Authorization; Type = Secret; Value = jira_api_key
Request Script:
Response Script:
Action 3 - Create JIRA Issue Comment
Method: POST
URL: https://cybersechub.atlassian.net/rest/api/2/issue/{issueIdOrKey}/comment
Headers:
Key = Content-Type; Type = Value; Value = application/json
Key = Accept; Type = Value; Value = application/json
Key = Authorization; Type = Secret; Value = jira_api_key
Request Script:
Response Script:
Upload Vulnerability Evidence to JIRA Issue
The purpose of this example is when a evidence file is uploaded to a vulnerability, the file is also uploaded to the matching JIRA Issue.

This example Flow can be downloaded from our Flows GitHub Repository and imported into your AttackForge.
Initial Set Up
Important: This example requires access to the AttackForge Self-Service API and AttackForge Flows
Event: Vulnerability Evidence Created
Secrets:
af_hostname - e.g. acme.attackforge.io
af_user_key - your AttackForge Self-Service API token
jira_hostname - e.g. acme.atlassian.net
jira_api_key - your JIRA API Key
Action 1 - Get Vulnerability
Method: GET
URL: https://{{af_hostname}}/api/ss/vulnerability/{id}
Headers:
Key = Content-Type; Type = Value; Value = application/json
Key = X-SSAPI-KEY; Type = Secret; Value = af_user_key
Request Script:
Response Script:
Action 2 - Check if JIRA Issue Id exists
Script:
Action 3 - Get JIRA Issue
Method: GET
URL: https://{{jira_hostname}}/rest/api/3/issue/{issueIdOrKey}
Headers:
Key = Content-Type; Type = Value; Value = application/json
Key = Authorization; Type = Secret; Value = jira_api_key
Request Script:
Response Script:
Action 4 - Check if File is already uploaded to JIRA Issue
Script:
Action 5 - Download Evidence File
Method: GET
URL: https://{{af_hostname}}/api/ss/vulnerability/{vulnId}/evidence/{fileStorageName}
Headers:
Key = Content-Type; Type = Value; Value = application/json
Key = X-SSAPI-KEY; Type = Secret; Value = af_user_key
Options:
Download Response: Yes
Request Script:
Response Script:
Action 6 - Upload File to JIRA
Method: POST
URL: https://{{jira_hostname}}/rest/api/3/issue/{issueIdOrKey}/attachments
Headers:
Key = X-Atlassian-Token; Type = Value; Value = no-check
Key = Accept; Type = Value; Value = application/json
Key = Content-Type; Type = Value; Value = multipart/form-data
Key = Authorization; Type = Secret; Value = jira_api_key
Request Script:
Response Script:
Upload JIRA Attachment to Vulnerability Evidence
The purpose of this example is when an attachment is uploaded to a JIRA Issue, the file is also uploaded to the matching vulnerability in AttackForge.

This example Flow can be downloaded from our Flows GitHub Repository and imported into your AttackForge.
Initial Set Up
Important: This example requires access to the AttackForge Self-Service API and AttackForge Flows
JIRA WebHooks
Configure 'Attachment Created' web hook from https://<your-jira-tenant>.atlassian.net/plugins/servlet/webhooks#
Append ?issueKey={issue.key} to the end of the trigger url to ensure that your flow can identify which JIRA Issue the attachment belongs to
HTTP Trigger
Method: POST
Authentication: None
Secrets:
af_hostname - e.g. acme.attackforge.io
af_user_key - your AttackForge Self-Service API token
jira_hostname - e.g. acme.atlassian.net
jira_api_key - your JIRA API Key
jira_webhook_secret - your JIRA webhook secret
Action 1 - Validate Message from JIRA
Script:
Action 2 - Get Vulnerability
Method: GET
URL: https://{{af_hostname}}/api/ss/vulnerability/{id}
Headers:
Key = Content-Type; Type = Value; Value = application/json
Key = X-SSAPI-KEY; Type = Secret; Value = af_user_key
Request Script:
Response Script:
Action 3 - Check if Attachment is already uploaded to Vulnerability
Script:
Action 4 - Get JIRA Attachment Download Link
Method: GET
URL: https://{{jira_hostname}}/rest/api/3/attachment/content/{id}
Headers:
Key = Content-Type; Type = Value; Value = application/json
Key = Authorization; Type = Secret; Value = jira_api_key
Request Script:
Response Script:
Action 5 - Download JIRA Attachment
Method: GET
Options:
Download Response: Yes
Request Script:
Response Script:
Action 6 - Upload File to Vulnerability
Method: POST
URL: https://{{af_hostname}}/api/ss/vulnerability/{id}/evidence
Headers:
Key = Content-Type; Type = Value; Value = multipart/form-data
Key = X-SSAPI-KEY; Type = Secret; Value = af_user_key
Request Script:
Response Script:
Last updated