Cannot import sarif report from JFrog XRay CLI

Hi,

I’m not sure if it’s an issue on JFrog XRay side or on SonarQube.

We are using SonarQube Enterprise 9.9.4 and latest version of SonarQube Scanner

We are trying to import sarif report from JFrog XRay into SonarQube but it doesn’t work and will output following message

[15:29:34.192+02:00] - [INFO] 13:29:31.682 Sensor Import external issues report from SARIF file.
[15:29:34.192+02:00] - [WARNING] 13:29:31.769 Failed to import an issue raised by tool JFrog Xray SCA, error: URI has an authority component

I was trying to check if the report respect the JSON schema of Sarif 2.1.0 and it looked ok, but again I’m not sure

This is my report

{
  "version": "2.1.0",
  "$schema": "https://raw.githubusercontent.com/oasis-tcs/sarif-spec/master/Schemata/sarif-schema-2.1.0.json",
  "runs": [
    {
      "tool": {
        "driver": {
          "informationUri": "https://docs.jfrog-applications.jfrog.io/jfrog-security-features/sca",
          "name": "JFrog Xray SCA",
          "rules": [
            {
              "id": "CVE-2016-1000027_org.springframework:spring-web_5.3.31",
              "shortDescription": {
                "text": "[CVE-2016-1000027] org.springframework:spring-web 5.3.31"
              },
              "help": {
                "text": "Pivotal Spring Framework through 5.3.16 suffers from a potential remote code execution (RCE) issue if used for Java deserialization of untrusted data. Depending on how the library is implemented within a product, this issue may or not occur, and authentication may be required. NOTE: the vendor's position is that untrusted data is not an intended use case. The product's behavior will not be changed because some users rely on deserialization of trusted data.",
                "markdown": "| Severity Score | Direct Dependencies | Fixed Versions     |\n| :---:        |    :----:   |          :---: |\n| 9.8      | `org.springframework:spring-web 5.3.31`       | [6.0.0]   |"
              },
              "properties": {
                "security-severity": "9.8"
              }
            },
            {
              "id": "CVE-2024-22259_org.springframework:spring-web_5.3.31",
              "shortDescription": {
                "text": "[CVE-2024-22259] org.springframework:spring-web 5.3.31"
              },
              "help": {
                "text": "Applications that use UriComponentsBuilder in Spring Framework to parse an externally provided URL (e.g. through a query parameter) AND perform validation checks on the host of the parsed URL may be vulnerable to a  open redirect https://cwe.mitre.org/data/definitions/601.html  attack or to a SSRF attack if the URL is used after passing validation checks.\n\nThis is the same as  CVE-2024-22243 https://spring.io/security/cve-2024-22243 , but with different input.\n\n",
                "markdown": "| Severity Score | Direct Dependencies | Fixed Versions     |\n| :---:        |    :----:   |          :---: |\n| 8.1      | `org.springframework:spring-web 5.3.31`       | [5.3.33], [6.0.18], [6.1.5]   |"
              },
              "properties": {
                "security-severity": "8.1"
              }
            },
            {
              "id": "CVE-2024-22257_org.springframework.security:spring-security-core_5.8.9",
              "shortDescription": {
                "text": "[CVE-2024-22257] org.springframework.security:spring-security-core 5.8.9"
              },
              "help": {
                "text": "In Spring Security, versions 5.7.x prior to 5.7.12, 5.8.x prior to \n5.8.11, versions 6.0.x prior to 6.0.9, versions 6.1.x prior to 6.1.8, \nversions 6.2.x prior to 6.2.3, an application is possible vulnerable to \nbroken access control when it directly uses the AuthenticatedVoter#vote passing a null Authentication parameter.\n\n",
                "markdown": "| Severity Score | Direct Dependencies | Fixed Versions     |\n| :---:        |    :----:   |          :---: |\n| 8.2      | `org.springframework.security:spring-security-core 5.8.9`       | [5.7.12], [5.8.11], [6.1.8], [6.2.3]   |"
              },
              "properties": {
                "security-severity": "8.2"
              }
            },
            {
              "id": "CVE-2024-22243_org.springframework:spring-web_5.3.31",
              "shortDescription": {
                "text": "[CVE-2024-22243] org.springframework:spring-web 5.3.31"
              },
              "help": {
                "text": "Applications that use UriComponentsBuilder to parse an externally provided URL (e.g. through a query parameter) AND perform validation checks on the host of the parsed URL may be vulnerable to a  open redirect https://cwe.mitre.org/data/definitions/601.html  attack or to a SSRF attack if the URL is used after passing validation checks.\n",
                "markdown": "| Severity Score | Direct Dependencies | Fixed Versions     |\n| :---:        |    :----:   |          :---: |\n| 8.1      | `org.springframework:spring-web 5.3.31`       | [5.3.32], [6.0.17], [6.1.4]   |"
              },
              "properties": {
                "security-severity": "8.1"
              }
            },
            {
              "id": "CVE-2023-48795_org.apache.sshd:sshd-common_2.11.0",
              "shortDescription": {
                "text": "[CVE-2023-48795] org.apache.sshd:sshd-common 2.11.0"
              },
              "help": {
                "text": "The SSH transport protocol with certain OpenSSH extensions, found in OpenSSH before 9.6 and other products, allows remote attackers to bypass integrity checks such that some packets are omitted (from the extension negotiation message), and a client and server may consequently end up with a connection for which some security features have been downgraded or disabled, aka a Terrapin attack. This occurs because the SSH Binary Packet Protocol (BPP), implemented by these extensions, mishandles the handshake phase and mishandles use of sequence numbers. For example, there is an effective attack against SSH's use of ChaCha20-Poly1305 (and CBC with Encrypt-then-MAC). The bypass occurs in chacha20-poly1305@openssh.com and (if CBC is used) the -etm@openssh.com MAC algorithms. This also affects Maverick Synergy Java SSH API before 3.1.0-SNAPSHOT, Dropbear through 2022.83, Ssh before 5.1.1 in Erlang/OTP, PuTTY before 0.80, AsyncSSH before 2.14.2, golang.org/x/crypto before 0.17.0, libssh before 0.10.6, libssh2 through 1.11.0, Thorn Tech SFTP Gateway before 3.4.6, Tera Term before 5.1, Paramiko before 3.4.0, jsch before 0.2.15, SFTPGo before 2.5.6, Netgate pfSense Plus through 23.09.1, Netgate pfSense CE through 2.7.2, HPN-SSH through 18.2.0, ProFTPD before 1.3.8b (and before 1.3.9rc2), ORYX CycloneSSH before 2.3.4, NetSarang XShell 7 before Build 0144, CrushFTP before 10.6.0, ConnectBot SSH library before 2.2.22, Apache MINA sshd through 2.11.0, sshj through 0.37.0, TinySSH through 20230101, trilead-ssh2 6401, LANCOM LCOS and LANconfig, FileZilla before 3.66.4, Nova before 11.8, PKIX-SSH before 14.4, SecureCRT before 9.4.3, Transmit5 before 5.10.4, Win32-OpenSSH before 9.5.0.0p1-Beta, WinSCP before 6.2.2, Bitvise SSH Server before 9.32, Bitvise SSH Client before 9.33, KiTTY through 0.76.1.13, the net-ssh gem 7.2.0 for Ruby, the mscdex ssh2 module before 1.15.0 for Node.js, the thrussh library before 0.35.1 for Rust, and the Russh crate before 0.40.2 for Rust.",
                "markdown": "| Severity Score | Direct Dependencies | Fixed Versions     |\n| :---:        |    :----:   |          :---: |\n| 5.9      | `org.jenkins-ci.main:cli 2.440.2`       | No fix available   |"
              },
              "properties": {
                "security-severity": "5.9"
              }
            },
            {
              "id": "CVE-2023-48795_org.apache.sshd:sshd-core_2.11.0",
              "shortDescription": {
                "text": "[CVE-2023-48795] org.apache.sshd:sshd-core 2.11.0"
              },
              "help": {
                "text": "The SSH transport protocol with certain OpenSSH extensions, found in OpenSSH before 9.6 and other products, allows remote attackers to bypass integrity checks such that some packets are omitted (from the extension negotiation message), and a client and server may consequently end up with a connection for which some security features have been downgraded or disabled, aka a Terrapin attack. This occurs because the SSH Binary Packet Protocol (BPP), implemented by these extensions, mishandles the handshake phase and mishandles use of sequence numbers. For example, there is an effective attack against SSH's use of ChaCha20-Poly1305 (and CBC with Encrypt-then-MAC). The bypass occurs in chacha20-poly1305@openssh.com and (if CBC is used) the -etm@openssh.com MAC algorithms. This also affects Maverick Synergy Java SSH API before 3.1.0-SNAPSHOT, Dropbear through 2022.83, Ssh before 5.1.1 in Erlang/OTP, PuTTY before 0.80, AsyncSSH before 2.14.2, golang.org/x/crypto before 0.17.0, libssh before 0.10.6, libssh2 through 1.11.0, Thorn Tech SFTP Gateway before 3.4.6, Tera Term before 5.1, Paramiko before 3.4.0, jsch before 0.2.15, SFTPGo before 2.5.6, Netgate pfSense Plus through 23.09.1, Netgate pfSense CE through 2.7.2, HPN-SSH through 18.2.0, ProFTPD before 1.3.8b (and before 1.3.9rc2), ORYX CycloneSSH before 2.3.4, NetSarang XShell 7 before Build 0144, CrushFTP before 10.6.0, ConnectBot SSH library before 2.2.22, Apache MINA sshd through 2.11.0, sshj through 0.37.0, TinySSH through 20230101, trilead-ssh2 6401, LANCOM LCOS and LANconfig, FileZilla before 3.66.4, Nova before 11.8, PKIX-SSH before 14.4, SecureCRT before 9.4.3, Transmit5 before 5.10.4, Win32-OpenSSH before 9.5.0.0p1-Beta, WinSCP before 6.2.2, Bitvise SSH Server before 9.32, Bitvise SSH Client before 9.33, KiTTY through 0.76.1.13, the net-ssh gem 7.2.0 for Ruby, the mscdex ssh2 module before 1.15.0 for Node.js, the thrussh library before 0.35.1 for Rust, and the Russh crate before 0.40.2 for Rust.",
                "markdown": "| Severity Score | Direct Dependencies | Fixed Versions     |\n| :---:        |    :----:   |          :---: |\n| 5.9      | `org.jenkins-ci.main:cli 2.440.2`       | No fix available   |"
              },
              "properties": {
                "security-severity": "5.9"
              }
            },
            {
              "id": "XRAY-589059_org.jfree:jcommon_1.0.23",
              "shortDescription": {
                "text": "[XRAY-589059] org.jfree:jcommon 1.0.23"
              },
              "help": {
                "text": "This package may be vulnerable to the MavenGate attack",
                "markdown": "| Severity Score | Direct Dependencies | Fixed Versions     |\n| :---:        |    :----:   |          :---: |\n| 0.0      | `org.jfree:jcommon 1.0.23`       | No fix available   |"
              },
              "properties": {
                "security-severity": "0.0"
              }
            },
            {
              "id": "XRAY-589059_org.slf4j:slf4j-api_2.0.11",
              "shortDescription": {
                "text": "[XRAY-589059] org.slf4j:slf4j-api 2.0.11"
              },
              "help": {
                "text": "This package may be vulnerable to the MavenGate attack",
                "markdown": "| Severity Score | Direct Dependencies | Fixed Versions     |\n| :---:        |    :----:   |          :---: |\n| 0.0      | `org.jenkins-ci.main:cli 2.440.2`       | No fix available   |"
              },
              "properties": {
                "security-severity": "0.0"
              }
            },
            {
              "id": "XRAY-589059_com.jcraft:jzlib_1.1.3-kohsuke-1",
              "shortDescription": {
                "text": "[XRAY-589059] com.jcraft:jzlib 1.1.3-kohsuke-1"
              },
              "help": {
                "text": "This package may be vulnerable to the MavenGate attack",
                "markdown": "| Severity Score | Direct Dependencies | Fixed Versions     |\n| :---:        |    :----:   |          :---: |\n| 0.0      | `com.jcraft:jzlib 1.1.3-kohsuke-1`       | No fix available   |"
              },
              "properties": {
                "security-severity": "0.0"
              }
            },
            {
              "id": "XRAY-589059_org.slf4j:jcl-over-slf4j_2.0.11",
              "shortDescription": {
                "text": "[XRAY-589059] org.slf4j:jcl-over-slf4j 2.0.11"
              },
              "help": {
                "text": "This package may be vulnerable to the MavenGate attack",
                "markdown": "| Severity Score | Direct Dependencies | Fixed Versions     |\n| :---:        |    :----:   |          :---: |\n| 0.0      | `org.jenkins-ci.main:cli 2.440.2`       | No fix available   |"
              },
              "properties": {
                "security-severity": "0.0"
              }
            },
            {
              "id": "XRAY-589059_org.slf4j:slf4j-jdk14_2.0.11",
              "shortDescription": {
                "text": "[XRAY-589059] org.slf4j:slf4j-jdk14 2.0.11"
              },
              "help": {
                "text": "This package may be vulnerable to the MavenGate attack",
                "markdown": "| Severity Score | Direct Dependencies | Fixed Versions     |\n| :---:        |    :----:   |          :---: |\n| 0.0      | `org.jenkins-ci.main:cli 2.440.2`       | No fix available   |"
              },
              "properties": {
                "security-severity": "0.0"
              }
            },
            {
              "id": "XRAY-589059_org.jfree:jfreechart_1.0.19",
              "shortDescription": {
                "text": "[XRAY-589059] org.jfree:jfreechart 1.0.19"
              },
              "help": {
                "text": "This package may be vulnerable to the MavenGate attack",
                "markdown": "| Severity Score | Direct Dependencies | Fixed Versions     |\n| :---:        |    :----:   |          :---: |\n| 0.0      | `org.jfree:jfreechart 1.0.19`       | No fix available   |"
              },
              "properties": {
                "security-severity": "0.0"
              }
            }
          ],
          "version": "3.69.3"
        }
      },
      "results": [
        {
          "ruleId": "CVE-2016-1000027_org.springframework:spring-web_5.3.31",
          "ruleIndex": 0,
          "level": "error",
          "message": {
            "text": "[CVE-2016-1000027] org.springframework:spring-web 5.3.31"
          },
          "locations": [
            {
              "physicalLocation": {
                "artifactLocation": {
                  "uri": "file://Package-Descriptor"
                }
              }
            }
          ]
        },
        {
          "ruleId": "CVE-2024-22259_org.springframework:spring-web_5.3.31",
          "ruleIndex": 1,
          "level": "error",
          "message": {
            "text": "[CVE-2024-22259] org.springframework:spring-web 5.3.31"
          },
          "locations": [
            {
              "physicalLocation": {
                "artifactLocation": {
                  "uri": "file://Package-Descriptor"
                }
              }
            }
          ]
        },
        {
          "ruleId": "CVE-2024-22257_org.springframework.security:spring-security-core_5.8.9",
          "ruleIndex": 2,
          "level": "error",
          "message": {
            "text": "[CVE-2024-22257] org.springframework.security:spring-security-core 5.8.9"
          },
          "locations": [
            {
              "physicalLocation": {
                "artifactLocation": {
                  "uri": "file://Package-Descriptor"
                }
              }
            }
          ]
        },
        {
          "ruleId": "CVE-2024-22243_org.springframework:spring-web_5.3.31",
          "ruleIndex": 3,
          "level": "error",
          "message": {
            "text": "[CVE-2024-22243] org.springframework:spring-web 5.3.31"
          },
          "locations": [
            {
              "physicalLocation": {
                "artifactLocation": {
                  "uri": "file://Package-Descriptor"
                }
              }
            }
          ]
        },
        {
          "ruleId": "CVE-2023-48795_org.apache.sshd:sshd-common_2.11.0",
          "ruleIndex": 4,
          "level": "warning",
          "message": {
            "text": "[CVE-2023-48795] org.jenkins-ci.main:cli 2.440.2"
          },
          "locations": [
            {
              "physicalLocation": {
                "artifactLocation": {
                  "uri": "file://Package-Descriptor"
                }
              }
            }
          ]
        },
        {
          "ruleId": "CVE-2023-48795_org.apache.sshd:sshd-core_2.11.0",
          "ruleIndex": 5,
          "level": "warning",
          "message": {
            "text": "[CVE-2023-48795] org.jenkins-ci.main:cli 2.440.2"
          },
          "locations": [
            {
              "physicalLocation": {
                "artifactLocation": {
                  "uri": "file://Package-Descriptor"
                }
              }
            }
          ]
        },
        {
          "ruleId": "XRAY-589059_org.jfree:jcommon_1.0.23",
          "ruleIndex": 6,
          "level": "note",
          "message": {
            "text": "[XRAY-589059] org.jfree:jcommon 1.0.23"
          },
          "locations": [
            {
              "physicalLocation": {
                "artifactLocation": {
                  "uri": "file://Package-Descriptor"
                }
              }
            }
          ]
        },
        {
          "ruleId": "XRAY-589059_org.slf4j:slf4j-api_2.0.11",
          "ruleIndex": 7,
          "level": "note",
          "message": {
            "text": "[XRAY-589059] org.jenkins-ci.main:cli 2.440.2"
          },
          "locations": [
            {
              "physicalLocation": {
                "artifactLocation": {
                  "uri": "file://Package-Descriptor"
                }
              }
            }
          ]
        },
        {
          "ruleId": "XRAY-589059_com.jcraft:jzlib_1.1.3-kohsuke-1",
          "ruleIndex": 8,
          "level": "note",
          "message": {
            "text": "[XRAY-589059] com.jcraft:jzlib 1.1.3-kohsuke-1"
          },
          "locations": [
            {
              "physicalLocation": {
                "artifactLocation": {
                  "uri": "file://Package-Descriptor"
                }
              }
            }
          ]
        },
        {
          "ruleId": "XRAY-589059_org.slf4j:jcl-over-slf4j_2.0.11",
          "ruleIndex": 9,
          "level": "note",
          "message": {
            "text": "[XRAY-589059] org.jenkins-ci.main:cli 2.440.2"
          },
          "locations": [
            {
              "physicalLocation": {
                "artifactLocation": {
                  "uri": "file://Package-Descriptor"
                }
              }
            }
          ]
        },
        {
          "ruleId": "XRAY-589059_org.slf4j:slf4j-jdk14_2.0.11",
          "ruleIndex": 10,
          "level": "note",
          "message": {
            "text": "[XRAY-589059] org.jenkins-ci.main:cli 2.440.2"
          },
          "locations": [
            {
              "physicalLocation": {
                "artifactLocation": {
                  "uri": "file://Package-Descriptor"
                }
              }
            }
          ]
        },
        {
          "ruleId": "XRAY-589059_org.jfree:jfreechart_1.0.19",
          "ruleIndex": 11,
          "level": "note",
          "message": {
            "text": "[XRAY-589059] org.jfree:jfreechart 1.0.19"
          },
          "locations": [
            {
              "physicalLocation": {
                "artifactLocation": {
                  "uri": "file://Package-Descriptor"
                }
              }
            }
          ]
        }
      ]
    }
  ]
}

I saw also some issue on their CLI related to sarif but I’m not sure if related. jf audit: SARIF format is missing most of the fields provided by the JSON format · Issue #2063 · jfrog/jfrog-cli · GitHub

Also I’m able to import the same JSON sarif report into Jenkins warning-ng plugin. It doesn’t complain about any “URI has an authority component”

I can provide more imformation if needed

Thanks

I tested the same on 10.5. Problem is the same

Issue seem because of the file:// prefix

"artifactLocation": {
   "uri": "file://package.json"
}

If I modify the report to

"artifactLocation": {
   "uri": "package.json"
}

I’m able to import the report on SonarQube

11:14:32.821 DEBUG: Importing SARIF issues from '.sarif.json'
11:14:32.831 WARN: Unable to detect rules severity for issue detected by tool JFrog Xray SCA, falling back to default rule severity: MEDIUM
11:14:32.846 INFO: File .sarif.json: 1 run(s) successfully imported (3 vulnerabilities in total).
11:14:32.846 INFO: Sensor Import external issues report from SARIF file. (done) | time=25ms

artifactLocation.uri is an optional field according to Importing issues from SARIF reports

In my option SonarQube should not fail if such field contains file://

I didn’t tested to import such report on other tool like GitHub. But according to their documentation they accept the file:// prefix : SARIF support for code scanning - GitHub Docs

Any help appreciated

1 Like

Hi @jonesbusy,

We recognize that the file:// format is currently not handled by the scanner on the uri field.
We’ve created a ticket to get this improved in the future. Here is the link to the ticket.

Regards,
@AlxO

1 Like