90083e3ae5
- CHANGELOG: remove inaccurate Path.is_relative_to() mention not used in code - Feature file: remove unused Background step referencing non-matching BDD step - CONTRIBUTORS.md: add missing trailing newline
48 lines
2.4 KiB
Gherkin
48 lines
2.4 KiB
Gherkin
Feature: Path containment startswith bypass prevention (issue #7478 / PR #7801)
|
|
AS a security engineer
|
|
I WANT path containment checks to use semantic comparison instead of string prefix matching
|
|
SO THAT sibling-directory prefix-collision attacks cannot bypass sandbox isolation
|
|
|
|
Background:
|
|
Given a temporary sandbox directory "/tmp/sandbox"
|
|
|
|
# ---- PathMapper _is_under prefix collision prevention (#7478) ----
|
|
|
|
@tdd_issue @tdd_issue_7478
|
|
Scenario: PathMapper rejects sibling-prefix path traversal via relpath containment
|
|
Given I have a PathMapper with host_root "/tmp/sandbox" and container_root "/workspace"
|
|
And a sibling directory with a name that is a prefix of the sandbox root
|
|
When I check whether host path is safe from prefix collision
|
|
Then the prefix collision check should return ``False``
|
|
|
|
@tdd_issue @tdd_issue_7478
|
|
Scenario: PathMapper correctly identifies legitimate child paths
|
|
Given I have a PathMapper with host_root "/tmp/sandbox" and container_root "/workspace"
|
|
When I check whether "/tmp/sandbox/src/main.py" is a host path
|
|
Then the host containment result should be true
|
|
|
|
@tdd_issue @tdd_issue_7478
|
|
Scenario: PathMapper correctly identifies root equality
|
|
Given I have a PathMapper with host_root "/tmp/sandbox" and container_root "/workspace"
|
|
When I check whether "/tmp/sandbox" is a host path
|
|
Then the host containment result should be true
|
|
|
|
@tdd_issue @tdd_issue_7478
|
|
Scenario: PathMapper rejects sibling-prefix escape path
|
|
Given I have a PathMapper with host_root "/tmp/sandbox" and container_root "/workspace"
|
|
And a file "escape-evil.txt" with content "malicious" at "/tmp/sandbox-escape/escape-evil.txt"
|
|
When I check whether "/tmp/sandbox-escape/escape-evil.txt" is a host path
|
|
Then the host containment result should be false
|
|
|
|
@tdd_issue @tdd_issue_7478
|
|
Scenario: PathMapper maps root path exactly (no relative component)
|
|
Given I have a PathMapper with host_root "/tmp/sandbox" and container_root "/workspace"
|
|
When I map the host path "/tmp/sandbox" to container
|
|
Then the mapped path should be "/workspace"
|
|
|
|
@tdd_issue @tdd_issue_7478
|
|
Scenario: PathMapper maps a child path correctly through relpath
|
|
Given I have a PathMapper with host_root "/tmp/sandbox" and container_root "/workspace"
|
|
When I map the host path "/tmp/sandbox/src/main.py" to container
|
|
Then the mapped path should be "/workspace/src/main.py"
|