{"id":"CVE-2026-29788","aliases":["EUVD-2026-10067","GHSA-gfhq-7499-f3f2"],"status":"published","title":"TSPortal: Anyone can forge self-deletion requests of any user","description":"TSPortal is the WikiTide Foundation’s in-house platform used by the Trust and Safety team to manage reports, investigations, appeals, and transparency work. Prior to version 30, conversion of empty strings to null allows disguising DPA reports as genuine self-deletion reports. This issue has been patched in version 30.","severity":{"version":"4.0","score":8.4,"vector":"CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:P/VC:N/VI:L/VA:H/SC:N/SI:L/SA:H","level":"high","assessor":"cna","from":"cve"},"epss":{"day":"2026-11-12","score":0.00295,"percentile":0.22433,"model":"v2026.06.15"},"facts":{"in_kev":false,"known_exploited":false,"public_exploit":false,"fix_available":true},"cwes":["CWE-1287","CWE-283"],"published":"2026-03-06T20:31:17Z","modified":"2026-10-28T02:30:34Z","fixes":[{"ecosystem":"Packagist","package":"miraheze/ts-portal","fixed_in":["30"],"sources":["ghsa","osv"]}],"affected":[{"source":"ghsa","ecosystem":"Packagist","package":"miraheze/ts-portal","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"last_affected":"29"},{"fixed":"30"}]}]},{"source":"osv","ecosystem":"Packagist","package":"miraheze/ts-portal","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"30"}]}],"versions":["v1","v10","v11","v12","v13","v14","v15","v16","v17","v18","v19","v2","v20","v21","v22","v23","v24","v25","v26","v27","v28","v29","v3","v4","v5","v6","v7","v8","v9"]}],"products":[{"vendor":"miraheze","product":"tsportal"},{"vendor":"wikitide","product":"tsportal"}],"references":[{"url":"https://github.com/miraheze/TSPortal/security/advisories/GHSA-gfhq-7499-f3f2","tags":["x_refsource_CONFIRM","Exploit","Vendor Advisory","advisory","web"]},{"url":"https://issue-tracker.miraheze.org/T15053","tags":["x_refsource_MISC","Issue Tracking","web"]},{"url":"https://nvd.nist.gov/vuln/detail/CVE-2026-29788","tags":["advisory"]},{"url":"https://api.laravel.com/docs/12.x/Illuminate/Foundation/Configuration/Middleware.html#method_convertEmptyStringsToNull","tags":["web"]},{"url":"https://github.com/advisories/GHSA-gfhq-7499-f3f2"},{"url":"https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/29xxx/CVE-2026-29788.json","tags":["advisory"]},{"url":"https://github.com/miraheze/TSPortal","tags":["package"]}],"sources":{"cve":[{"id":"CVE-2026-29788","title":"TSPortal: Anyone can forge self-deletion requests of any user","description":"TSPortal is the WikiTide Foundation’s in-house platform used by the Trust and Safety team to manage reports, investigations, appeals, and transparency work. Prior to version 30, conversion of empty strings to null allows disguising DPA reports as genuine self-deletion reports. This issue has been patched in version 30.","status":"published","published":"2026-03-06T20:31:17.994Z","modified":"2026-03-09T20:54:30.781Z","cvss":[{"version":"4.0","score":8.4,"vector":"CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:P/VC:N/VI:L/VA:H/SC:N/SI:L/SA:H","level":"high","assessor":"cna"}],"cwes":["CWE-283","CWE-1287"],"updated_at":"2026-11-02T14:19:56.284359Z"}],"euvd":[{"id":"EUVD-2026-10067","description":"TSPortal is the WikiTide Foundation’s in-house platform used by the Trust and Safety team to manage reports, investigations, appeals, and transparency work. Prior to version 30, conversion of empty strings to null allows disguising DPA reports as genuine self-deletion reports. This issue has been patched in version 30.","status":"published","published":"2026-03-06T20:31:17Z","modified":"2026-03-09T20:54:30Z","cvss":[{"version":"4.0","score":8.4,"vector":"CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:P/VC:N/VI:L/VA:H/SC:N/SI:L/SA:H","level":"high"}],"updated_at":"2026-11-02T19:48:06.014236Z"}],"ghsa":[{"id":"GHSA-gfhq-7499-f3f2","title":"TSPortal: Any user can forge self-deletion requests for any account","description":"### Summary\nConversion of empty strings to null allows disguising DPA reports as genuine self-deletion reports.\n\n### Details\nCreating a DPA report about another user and leaving the evidence field empty causes that report to look like the reported user self-requested deletion of their data. Ingenuine report is not distinguishable from a genuine one.\n\nThis can be prevented by disabling [convertEmptyStringsToNull](https://api.laravel.com/docs/12.x/Illuminate/Foundation/Configuration/Middleware.html#method_convertEmptyStringsToNull) in the middleware, or by validating `evidence` in Http/Controllers/DPAController::store() to not be empty.\n\n### PoC\nNew DPA report -\u003e Select \"...someone who I suspect is under the age of 13\" for the \"The above username is...\" field -\u003e Add nothing to the \"Evidence\" field -\u003e Submit\n\n### Impact\nPotential unauthorized deletion of any arbitrary user's data both in the current system (TSPortal) and subsequent systems if actioned.","status":"published","published":"2026-03-27T15:37:10Z","modified":"2026-03-27T15:37:13Z","cvss":[{"version":"4.0","score":8.4,"vector":"CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:P/VC:N/VI:L/VA:H/SC:N/SI:L/SA:H","level":"high"},{"version":"3.1","score":7.5,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:H/A:N","level":"high"}],"cwes":["CWE-283","CWE-1287"],"updated_at":"2026-11-02T14:39:43.747579Z"}],"nvd":[{"id":"CVE-2026-29788","description":"TSPortal is the WikiTide Foundation’s in-house platform used by the Trust and Safety team to manage reports, investigations, appeals, and transparency work. Prior to version 30, conversion of empty strings to null allows disguising DPA reports as genuine self-deletion reports. This issue has been patched in version 30.","status":"published","published":"2026-03-06T21:16:15.293Z","modified":"2026-06-17T10:29:53.29Z","cvss":[{"version":"4.0","score":8.4,"vector":"CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:P/VC:N/VI:L/VA:H/SC:N/SI:L/SA:H/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X","level":"high","assessor":"secondary"},{"version":"3.1","score":7.5,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:H/A:N","level":"high","assessor":"primary"}],"cwes":["CWE-283","CWE-1287"],"updated_at":"2026-11-02T14:12:08.279852Z"}],"osv":[{"id":"CVE-2026-29788","title":"TSPortal: Anyone can forge self-deletion requests of any user","description":"TSPortal is the WikiTide Foundation’s in-house platform used by the Trust and Safety team to manage reports, investigations, appeals, and transparency work. Prior to version 30, conversion of empty strings to null allows disguising DPA reports as genuine self-deletion reports. This issue has been patched in version 30.","status":"published","published":"2026-03-06T20:31:17.994Z","modified":"2026-10-28T02:30:34.38745699Z","cvss":[{"version":"4.0","score":8.4,"vector":"CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:P/VC:N/VI:L/VA:H/SC:N/SI:L/SA:H","level":"high"}],"cwes":["CWE-1287","CWE-283"],"updated_at":"2026-11-02T15:45:00.530889Z"},{"id":"GHSA-gfhq-7499-f3f2","title":"TSPortal: Any user can forge self-deletion requests for any account","description":"### Summary\nConversion of empty strings to null allows disguising DPA reports as genuine self-deletion reports.\n\n### Details\nCreating a DPA report about another user and leaving the evidence field empty causes that report to look like the reported user self-requested deletion of their data. Ingenuine report is not distinguishable from a genuine one.\n\nThis can be prevented by disabling [convertEmptyStringsToNull](https://api.laravel.com/docs/12.x/Illuminate/Foundation/Configuration/Middleware.html#method_convertEmptyStringsToNull) in the middleware, or by validating `evidence` in Http/Controllers/DPAController::store() to not be empty.\n\n### PoC\nNew DPA report -\u003e Select \"...someone who I suspect is under the age of 13\" for the \"The above username is...\" field -\u003e Add nothing to the \"Evidence\" field -\u003e Submit\n\n### Impact\nPotential unauthorized deletion of any arbitrary user's data both in the current system (TSPortal) and subsequent systems if actioned.","status":"published","published":"2026-03-27T15:37:10Z","modified":"2026-04-09T05:21:46.944471Z","cvss":[{"version":"3.1","score":7.5,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:H/A:N","level":"high"},{"version":"4.0","score":8.4,"vector":"CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:P/VC:N/VI:L/VA:H/SC:N/SI:L/SA:H","level":"high"}],"cwes":["CWE-1287","CWE-283"],"updated_at":"2026-11-02T15:46:47.822182Z"}]}}
