Root chown -R on the Caddy data tree follows a symlink planted by the caddy user
Maintainers usually reply within 1 day
Nobody has claimed this yet.
Assessment
- Difficulty
- 3/5
- Estimated time
- 1-2 days
- Newbie friendliness
- 68/100
- Issue type
- Bug
- Clarity
- Clearly specified
- Activity status
- Active
- Tech stack
- go
- Domain
- operating-systems, security
Research direction
Read internal/hosting/caddy.go around line 368 and internal/server/core_services.go around line 568, then compare with the jump-account helper's chownTreeNoFollow. Update both chown sites consistently and add a test that plants a symlink under the tree and checks its target owner stays unchanged, skipping the root-only assertion when not running as root. Done when the test passes for both affected paths.
Written by the indexing model from the issue text.
Description
Finding (from the #3633 scan, pinned to 715c41ce)
Two root-run recursive chowns act on a tree the unprivileged caddy service user writes:
internal/hosting/caddy.go:368—chown -R caddy:caddy /var/lib/caddyinternal/server/core_services.go:568— the same command
Reachable only after the Caddy service is compromised, so the severity is low, but a root chown -R without -h follows a symlink the service user can plant under that tree.
Acceptance criteria
- The recursive chown does not follow symlinks:
-hat minimum, or the same walk the jump-account helper uses (chownTreeNoFollow), if it can be shared without a new dependency. - Both sites change together, so one can't drift from the other.
- Test: a symlink planted under the tree is not followed, and its target's owner is unchanged (root-only assertion, skipped otherwise).
Part of the #3342 security track. Follow-up to #3633.
- Dominant language
- Go
- Stars
- 296
- Forks
- 38
- Avg merge
- 7h 34m
- Merged PRs (30d)
- 648
Getting set up
This project ships no dev container, Dockerfile or contributing guide, so setting up is up to you: start from its README, and see our first-contribution guide for the general steps.
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 FootprintAI/Containarium
-
model:sonnet runtime:claude security size:S
Difficulty 2/5 1-3 hours Newbie friendliness 75/100
FootprintAI/Containarium#3671 ·
Maintainers usually reply within 1 day
-
model:sonnet runtime:claude security size:S
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
FootprintAI/Containarium#3624 · 1 comment ·
Maintainers usually reply within 1 day
-
Difficulty 2/5 1-3 hours Newbie friendliness 75/100
FootprintAI/Containarium#2491 ·
Maintainers usually reply within 1 day
-
model:sonnet runtime:claude security size:S
Difficulty 3/5 1-2 days Newbie friendliness 72/100
FootprintAI/Containarium#3672 ·
Maintainers usually reply within 1 day
-
In-box root chown/mkdir on user-owned paths: decide whether box-internal root is a trust boundaryOpenmodel:sonnet needs-decision runtime:claude security size:M
Difficulty 5/5 Over a week Newbie friendliness 35/100
FootprintAI/Containarium#3670 ·
Maintainers usually reply within 1 day
All issues in FootprintAI/Containarium
Similar issues
-
Difficulty 2/5 1-3 hours Newbie friendliness 74/100
Maintainers usually reply within 5 days
-
good first issue
Difficulty 2/5 1-3 hours Newbie friendliness 76/100
keyxmakerx/Chronicle#2190 ·
Maintainers usually reply within 1 day
-
Difficulty 2/5 1-3 hours Newbie friendliness 76/100
llm-d/llm-d-inference-sim#897 ·
Maintainers usually reply within 2 days
-
Difficulty 2/5 1-3 hours Newbie friendliness 76/100
inference-sim/inference-sim#2110 ·
Maintainers usually reply within 1 day
-
backlog
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
EchoTools/nevr-runtime#2385 ·
Maintainers usually reply within 1 day