Business::GoCardless before 1.01 has three Perl webhook flaws
Empty webhook secrets accept forgeries, and unsigned legacy payloads can exhaust memory before verification.
Forged webhook acceptance in Business::GoCardless before 1.01
Business::GoCardless for Perl before 1.01 accepts forged GoCardless webhooks when a configured webhook secret is undef or empty. signature_valid uses each secret as the HMAC key, and Digest::SHA treats an unset or empty value as an empty key. A remote attacker can sign a webhook with an empty key and have it treated as sent by GoCardless. Only installs that load an unset environment variable or an empty rotated-secret entry are affected.
What to do: Upgrade Business::GoCardless to 1.01. Do not leave the webhook secret unset or include an empty entry among rotated secrets.
| Product | Affected | Fixed in |
|---|---|---|
| Business::GoCardless | before 1.01 | 1.01 |
Order-of-magnitude estimate by the model from install counts, market share and public scan data it knows; verify before quoting.
Business::GoCardless versions before 1.01 for Perl accept forged webhooks when a configured webhook secret is undef or empty. signature_valid uses each configured secret as the HMAC key, and nothing rejects undef or an empty string, both of which Digest::SHA treats as an empty key. A secret read from an unset environment variable, or an empty entry in a list of rotated secrets, is used as is. A remote attacker can sign a forged webhook with an empty key and have it accepted as sent by GoCardless.
Empty webhook secrets accept forgeries, and unsigned legacy payloads can exhaust memory before verification.
Today 2.1K readers · 11K views · 8.3K reads · all time 157K views