Formstack Webhook HMAC Advisory Summary: Formstack is a SaaS company with well over half a million users including major higher education and healthcare companies. They provide a drag-and-drop form builder that allows their customers to collect all manner of data. Formstack's outbound webhook implementation fails to not print the HMAC secret in every request. Vendor was given 7 days, multiple emails and a simplified solution to a trivial problem, but failed to show any urgency or understanding of the implications. --- Vendor Response (5, 6, 7 days out respectively): "Thank you for letting us know about this security issue. Do not worry our Developers Team has placed this in the queue (high priority) to get fixed. We do not have an estimate yet, but I know that it is going to be reviewed this week. We will keep in touch with you ans youall be the first one to know once we have the right information to get this issue fixed." "Your security is our priority and I have referred this case already to our Developers Team and they are currently working on this security issue. Rest assured youall hear from us regarding the fix for this issue." "We thank you for your proactiveness. We will get this fix for sure." --- Details: Formstack boasts of its security and HIPAA compliance, and customers can collect sensitive data including credit card information and personal health information (PHI). When a form is completed it can be HTTP POSTed to a URL, commonly called a "webhook". To ensure that data posted into Formstack's clients' systems has originated from Formstack and is not fabricated by an attacker, they pass along an HMAC SHA of the body content which is found in an HTTP header. Their implementation has two flaws: Firstly, the algorithm is also in the header, and they instruct their clients to pluck the algorithm from there. This allows attackers to choose less secure algorithms. Secondly, they print the HMAC secret in every request body. A single intercepted request renders the entire exercise pointless, as the attacker now has the shared secret. This has been observed in production, though you need not look farther than their documentation for PoC: https://developers.formstack.com/docs/webhook-setup#adding-security-to-your-webhooks This humorous oversight has existed for an unknown amount of time.