Validate module --auto-install on a physical rooted device (MagiskSU two-parse model + cleanup)
Nobody has claimed this yet.
Assessment
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Newbie friendliness
- 45/100
- Issue type
- Feature
- Clarity
- Clearly specified
- Activity status
- Quiet
- Tech stack
- android, python
- Domain
- mobile-dev, security, testing-qa
Research direction
Start with PR #37 and its mocked, argv-exact tests to understand the expected push, MagiskSU install, checksum, reporting, and cleanup behavior. Run beetroot module <name> <zip> --auto-install on a physical rooted Android device with Magisk, then work through the checklist for normal, spaced, hostile, mismatched, batched, and failed installs. Done means the checklist passes and any divergence is folded back into the mocked tests.
Written by the indexing model from the issue text.
Description
Summary
PR #37 (#7) shipped beetroot module <name> <zip> --auto-install for adb-adopted rooted devices with the full CI-level contract pinned by mocked, argv-exact tests (push → su -c 'magisk --install-module …' → cleanup rm, sha256 fail-closed, per-module reporting, hostile-filename injection tests). What it could not include — the development environment has no Android device or Docker daemon — is a run against a real MagiskSU.
This issue tracks that one-time smoke validation on a physical rooted phone (or any real adb target with Magisk) before the feature is treated as release-grade.
Why this is worth a real-device pass
The security fix in PR #37 rests on a specific model of two device-side shell parses: adb shell flattens argv into one line (parse 1: device shell), then MagiskSU re-joins everything after -c and executes it via an inner sh -c (parse 2). The fix (synthesized beetroot-module-<i>.zip temp names + dual-level shlex.quote) was hand-traced and review-approved against that model, but the model itself is exactly the kind of thing that varies across su implementations/versions — and mocked tests structurally cannot catch a wrong model, only a wrong implementation of it.
Checklist
- Happy path: a real module zip installs via
--auto-install; module visible inmagisk --listafter reboot. - Spaced local filename (
My Module.zip) installs (synthesized remote name sidesteps both parses). - Hostile local filename (e.g.
$(true).zip— benign payload) installs normally, nothing executed, name never reaches a device shell. - sha256 mismatch refused before any push.
- One bad zip in a multi-module batch: failed row + remaining modules still install; exit 1.
- Cleanup: no
beetroot-module-*.zipleft in/data/local/tmpafter success AND after an install failure. - Fold any divergence found back into the mocked tests (adjust the model, then the strings the tests pin).
Refs
- #7, PR #37 (the "physical-device smoke test … still worthwhile before release" note in its body, and the security re-review's hand trace).
- Related but distinct: #29 (LSPosed recipe) — same hardware session could cover both.
- Dominant language
- Python
- Stars
- 1
- Forks
- 0
- PR merge metrics
- No merged PRs in 30d
Contributor guide
No contributing guide indexed for this repository
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from Xiddoc/Beetroot
-
ci
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
-
backend design
Difficulty 5/5 Over a week Newbie friendliness 38/100
-
backend design
Difficulty 4/5 3-5 days Newbie friendliness 48/100
-
enhancement
Difficulty 5/5 Over a week Newbie friendliness 25/100
-
ci enhancement
Difficulty 5/5 Over a week Newbie friendliness 35/100
Similar issues
-
area/auth bug comp/agent P3 platform/discord type/security
Difficulty 2/5 1-3 hours Newbie friendliness 88/100
NousResearch/hermes-agent#117848 ·
-
Difficulty 2/5 1-3 hours Newbie friendliness 74/100
bancolombia/sentinel#23 ·
-
test md OpenCI
Difficulty 2/5 1-3 hours Newbie friendliness 74/100
-
integration:quickjs org:external priority:backlog topic:code-interpreter topic:middleware type:feature
Difficulty 2/5 1-3 hours Newbie friendliness 74/100
langchain-ai/deepagents#6450 ·
-
bug client
Difficulty 2/5 1-3 hours Newbie friendliness 88/100