Forge webhooks aren’t signed.
If someone was able to forge a FIT somehow and hit an application endpoint with a malicious body, there’s no way on the application side to reject the forged body.
Proposal:
- Atlassian creates a public-private keypair and publishes the public key
- Atlassian signs all outgoing hooks with the private key incorporating the body, target URI path, and the FIT
- Atlassian adds this signature as
X-Atlassian-Signature - Atlassian includes tools to verify this signature in all forge backend SDKs
This way, even if someone somehow manages to compromise the FIT, they would need to compromise the secret private key as well in order to craft malicious application event hooks.
This approach is also backwards-compatible with existing forge apps - they didn’t validate signatures then, and until they update they won’t validate signatures.
The only wrinkle I can think of is how Atlassian rotates keys - it might be worthwhile to set an expiration and a 6-month rollover period for rotation, dropping warnings in the last 3 months and errors in the last month.