T05 · Unauthorized Access and Privilege Escalation
Warning
- Location
- shared/solo-teacher-workspace.schema.json:14
- Finding
- Cross-Skill Student Data Access Lacks an Enforceable Consent Gate## Vulnerability Details **File Location**: `SKILL.md:436-442, 533`; `shared/solo-teacher-workspace.schema.json:14-42, 93-145`; `shared/vocab.md:113-126` **Vulnerability Type**: Missing authorization enforcement for cross-Skill access **Risk Level**: Medium ### Vulnerable Code Snippets `SKILL.md:436-442` declares access to persistent student records: ```text Read: workspace.studentCards[].alias / .gradeLevel / .gradeBand / .subjects / .goals / .primaryWeaknesses → Used to match resources by knowledge point and difficulty workspace.homeworkFollowups[].mainErrors[].knowledgePoint / .dimension → Used to locate questions and review scripts for current errors workspace.lessonLogs[].completedContent / .nextLessonFocus → Used to locate materials for the next lesson ``` `SKILL.md:533` requires a consent check: ```text Validation requirements: case resources must pass the anonymization check (§9.2) before storage; before cross-Skill sharing, confirm that `consent.crossSkillSharing` is true. Real names, contact details, and school information must never be written (see `SECURITY_BASELINE.md`). ``` `shared/vocab.md:113-126` defines cross-Skill sharing as default-deny: ```text | `crossSkillSharing` | Allows the minimum fields to be shared across Skills | false | ``` However, `shared/solo-teacher-workspace.schema.json:14-42` permits the data reads without exposing a consent field: ```json "reads": [ "homeworkFollowups", "lessonLogs", "studentCards" ], "fields": { "studentCards": { "reads": [ "gradeBand", "primaryWeaknesses", "alias", "gradeLevel", "subjects", "goals" ] }, "homeworkFollowups": { "reads": [ "mainErrors" ] }, "lessonLogs": { "reads": [ "completedContent", "nextLessonFocus" ] } } ``` The corresponding `studentCard` schema at `shared/solo-teacher-workspace.schema.json:9 ...[truncated 3371 chars]
- Remediation
- ## Remediation Suggestions 1. Add the applicable student consent object and `crossSkillSharing` field to the distributed schema and to `x-skill-scope.fields.studentCards.reads`. 2. Enforce an explicit check before reading or correlating records from other Skills: - Allow access only when `crossSkillSharing === true`. - Treat false, missing, malformed, or unavailable consent as denied. 3. Apply the consent check before fetching student cards, homework records, or lesson logs, rather than filtering only after the records have been loaded. 4. If the platform cannot safely expose the authorization field, remove these cross-Skill reads and require the teacher to provide the knowledge point, difficulty, and grade band in the current conversation. 5. Minimize output by avoiding student aliases and individualized weaknesses in recommendation explanations unless they are strictly necessary and authorized. 6. Add automated tests for true, false, absent, malformed, and revoked consent states. 7. Ensure consent revocation immediately prevents subsequent reads and invalidates cached or derived matching results. 8. Add the referenced `SECURITY_BASELINE.md` to the package or replace the dangling reference with an included security document.
