Trust Assessment
readwise received a trust score of 86/100, placing it in the Mostly Trusted category. This skill has passed most security checks with only minor considerations noted.
SkillShield's automated analysis identified 1 finding: 0 critical, 1 high, 0 medium, and 0 low severity. Key findings include Unencoded user input in URL query parameters leads to API request injection.
The analysis covered 4 layers: Manifest Analysis, Static Code Analysis, Dependency Graph, LLM Behavioral Safety. All layers scored 70 or above, reflecting consistent security practices.
Last analyzed on February 14, 2026 (commit 13146e6a). SkillShield performs automated 4-layer security analysis on AI skills and MCP servers.
Layer Breakdown
Behavioral Risk Signals
Security Findings1
| Severity | Finding | Layer | Location | |
|---|---|---|---|---|
| HIGH | Unencoded user input in URL query parameters leads to API request injection Multiple functions in `scripts/readwise.sh` construct API request URLs by directly concatenating user-provided arguments into the query string without proper URL encoding. This allows an attacker to inject arbitrary query parameters by including URL-breaking characters (e.g., `&`, `=`) in their input. This could lead to manipulation of the API request, potentially overriding intended parameters, triggering unexpected API behavior, or bypassing security controls on the Readwise API.
Affected commands and parameters:
* `cmd_list`: `location`, `category`, `tag`, `updated_after`, `cursor` (lines 200-204)
* `cmd_highlights`: `book_id`, `category`, `tag`, `updated_after`, `query`, `cursor` (lines 255-260)
* `cmd_books`: `category`, `cursor` (lines 330-331)
* `cmd_search`: `query` (line 160)
* `cmd_highlight_create`: `book_id` (line 294)
* `cmd_highlight_update`: `color`, `note` (line 316) Implement a URL encoding function (e.g., using `python -c 'import urllib.parse, sys; print(urllib.parse.quote_plus(sys.stdin.read().strip()))'`) and apply it to all user-provided values before they are concatenated into URL query strings. For example, change `params+="&location=$location"` to `params+="&location=$(url_encode "$location")"`. Ensure all parameters listed above are properly encoded. | LLM | scripts/readwise.sh:160 |
Scan History
Embed Code
[](https://skillshield.io/report/c6da868f85ea6995)
Powered by SkillShield