RunestoneInteractive / RunestoneInteractive/rs

bookevent endpoint accepts spoofed completion data for self-graded activities

Open
#686 1 comment 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Dominant language
TypeScript
Stars
69
Forks
117
Avg merge
6d 4h
Merged PRs (30d)
24

Description

What Course are you in
N/A

What Page were you on
N/A

What is your username
N/A

Describe the bug
This is a client-side scoring vulnerability that affects multiple self-graded activity types in Runestone Academy.

The bookevent endpoint accepts forged JSON payloads containing correct: "T" and percent: 1, awarding full credit regardless of the actual input. There appears to be no server-side validation to confirm correctness. This affects:

  • Multiple Choice
  • Drag and Drop
  • ActiveCode
  • Parsons Problems (with a slightly different payload structure)

Because the platform relies on client-reported scoring data, users can spoof activity completion using developer tools and crafted fetch() requests.

I’ve created a small set of proof-of-concept scripts to demonstrate the issue. These are provided for educational and responsible disclosure purposes only.

PoC repository:
https://github.com/SRHackerr/runestone-answer-spoof-poc

Traceback

Javascript Errors
None encountered. All spoofed requests returned HTTP 200/201 with no errors in the console.

Contributor guide

No contributing guide indexed for this repository

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start by tracing the bookevent endpoint and its handling of the payloads described in the proof-of-concept repository. Compare the request structures for Multiple Choice, Drag and Drop, ActiveCode, and Parsons Problems; done means forged completion data no longer awards credit for any listed activity.

Written by the indexing model from the issue text.

Assessment

Tech stack
javascript, typescript
Domain
backend-api-design, security
Issue type
Bug
Difficulty
5/5
Estimated time
Over a week
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
25/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.