Uploaded image for project: 'Jira Data Center'
  1. Jira Data Center
  2. JRASERVER-78312

Jira 10 forcibly decodes encoded ASCII characters in webhook URLs

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Fixed
    • Icon: Highest Highest
    • 10.7.0, 11.0.0
    • 10.0.0, 10.1.1, 10.3.0
    • Webhooks
    • 10
    • 27
    • Severity 2 - Major
    • 241
    • Hide
      Atlassian Update – 16 April 2025

      Dear Customers,

      We’re pleased to announce that the issue with webhook URL handling has been addressed in Jira 10.7.0.

      These improvements ensure that:

      1. Configured callback URLs are processed as-is, with no additional encoding or decoding applied. For example, %25=%3D%3D remains %25=%3D%3D.
      2. All substitution values (e.g., modifiedUser.name) are escaped, so %25=%3D%3D becomes %2525=%253D%253D, ensuring a user with a funny name will not break the URL.

      For customers using Jira 10.3.5 LTS and higher, or Jira 10.6.0 and higher (note: not 10.4.x or 10.5.x), you can achieve the same behavior by enabling the system property:

      plugin.webhooks.skip.url.reencoding=true
      

      This property is automatically enabled in Jira 10.7.0.

      Best regards, 
      Daniel Rauf 
      Software Engineer

      Show
      Atlassian Update – 16 April 2025 Dear Customers, We’re pleased to announce that the issue with webhook URL handling has been addressed in Jira 10.7.0. These improvements ensure that: 1. Configured callback URLs are processed as-is, with no additional encoding or decoding applied. For example, %25=%3D%3D remains %25=%3D%3D . 2. All substitution values (e.g., modifiedUser.name ) are escaped, so %25=%3D%3D becomes %2525=%253D%253D , ensuring a user with a funny name will not break the URL. For customers using Jira 10.3.5 LTS and higher, or Jira 10.6.0 and higher ( note: not 10.4.x or 10.5.x ), you can achieve the same behavior by enabling the system property: plugin.webhooks.skip.url.reencoding= true This property is automatically enabled in Jira 10.7.0. Best regards,  Daniel Rauf  Software Engineer

      Issue Summary:

      In Jira 10, webhooks do not preserve URL encoding after being triggered, causing potential failures in processing by external services.

      Steps to Reproduce:

      • Upgrade to, or performa clean installation of, Jira 10.0.0
      • Configure a webhook with a URL containing the %3D characters.
        Example:
        https://webhook.site/87749b79-cde2-4add-91da-4538b46f01ec/TOKEN=%3D 
      • Trigger the webhook to send a request.

      Expected Results:

      The webhook request should preserve URL encoding in the query parameters, resulting in a correctly formatted URL:

      POST /87749b79-cde2-4add-91da-4538b46f01ec/TOKEN=%3D?

       
      Actual Results:
      In Jira 10.0.0 and later, the webhook request does not preserve URL encoding, resulting in an incorrect URL:

      POST /87749b79-cde2-4add-91da-4538b46f01ec/TOKEN== HTTP/1.1
      

       
      Impact:

      This bug affects the functionality of webhooks that rely on special characters being URL-encoded, potentially leading to authentication failures and disruptions in integrations with external services.

      Workaround:

      Try one of the following workarounds to address the issue:

      1. Secure admin webhooks: Use this feature to avoid passing security tokens via URLs.
      2. Re-generate tokens: Generate new tokens until they don't contain problematic characters like `%3D`.
      3. Outbound HTTP/S proxy: Use a network proxy to re-write webhook URLs for proper encoding.

      These options provide temporary solutions until a permanent fix is available.


      For customers using Jira 10.3.5 LTS and higher, or Jira 10.6.0 and higher (note: not 10.4.x or 10.5.x), you can activate the fix by enabling the system property (i.e. setenv.sh file):

      -Dplugin.webhooks.skip.url.reencoding=true
      

      This property is automatically enabled starting from Jira 10.7.0.

              drauf Daniel Rauf
              d34f536ab7f6 Eduard Claproth
              Votes:
              28 Vote for this issue
              Watchers:
              38 Start watching this issue

                Created:
                Updated:
                Resolved: