Skip to content

Conversation

@Sh3idan
Copy link
Owner

@Sh3idan Sh3idan commented Dec 24, 2019

Fix sandbox escape.

case 1

My architecture:

file_sb/
├── home
│   └── user
│       └── bin.elf
└── proc
    ├── 1000
    │   └── exe -> ../../home/user/bin.elf
    └── self -> 1000

FileSystem::resolve_path returns non-sandboxed path if path parameter is a symbolic link and follow_link is False. See below:

[syscalls][sys_x86_64_readlink][DEBUG]: sys_readlink('/proc/self/exe', 13f028, fff)
[environment][resolve_path][DEBUG]: resolve_path(path='/proc/self/exe', follow_link=False)
[environment][resolve_path][DEBUG]: -> 'home/user/bin.elf'
[syscalls][syscall_x86_64_exception_handler][DEBUG]: -> ffffffffffffffff

case 2

file_sb/
├── home
│   └── user
│       └── bin.elf
└── proc
    ├── 1000
    │   └── exe -> ../../../../home/user/bin.elf
    └── self -> 1000

Second case:

[syscalls][sys_generic_open][DEBUG]: sys_open('/proc/self/exe', 0, 0)
[environment][resolve_path][DEBUG]: resolve_path(path='/proc/self/exe', follow_link=True)
[environment][resolve_path][DEBUG]: resolve_path(path='../../home/user/bin.elf', follow_link=True)
[environment][resolve_path][DEBUG]: -> '/home/bla/[TRUNCATED]/file_sb/../../home/user/bin.elf'
[environment][resolve_path][DEBUG]: -> '/home/bla/[TRUNCATED]/file_sb/../../home/user/bin.elf'
[syscalls][syscall_x86_64_exception_handler][DEBUG]: -> ffffffffffffffff

...

[syscalls][sys_x86_64_readlink][DEBUG]: sys_readlink('/proc/self/exe', 13f028, fff)
[environment][resolve_path][DEBUG]: resolve_path(path='/proc/self/exe', follow_link=False)
[environment][resolve_path][DEBUG]: -> '../../home/user/bin.elf'
[syscalls][syscall_x86_64_exception_handler][DEBUG]: -> ffffffffffffffff

Current behavior

try to solve relative link targeting something in the sandbox

[environment][readlink][DEBUG]: readlink('/proc/self/exe')
[environment][resolve_path][DEBUG]: resolve_path(path='/proc/self/exe', follow_link=False)
[environment][resolve_path][DEBUG]: -> '/home/bla/[TRUNCATED]/file_sb/proc/self/exe'
[environment][resolve_path][DEBUG]: resolve_path(path='/home/bla/[TRUNCATED]/file_sb/home/user/bin.elf', follow_link=False)
[environment][resolve_path][DEBUG]: -> '/home/bla/[TRUNCATED]/file_sb/home/user/bin.elf'
[environment][readlink][DEBUG]: -> '/home/bla/[TRUNCATED]/file_sb/home/user/bin.elf'
[syscalls][syscall_x86_64_exception_handler][DEBUG]: -> 4b

try to solve relative link targeting something out of sandbox

[environment][readlink][DEBUG]: readlink('/proc/self/exe')
[environment][resolve_path][DEBUG]: resolve_path(path='/proc/self/exe', follow_link=False)
[environment][resolve_path][DEBUG]: -> '/home/bla/[TRUNCATED]/file_sb/proc/self/exe'
[environment][resolve_path][DEBUG]: resolve_path(path='/home/bla/[TRUNCATED]/bin.elf', follow_link=False)
[environment][resolve_path][DEBUG]: -> '/home/bla/[TRUNCATED]/file_sb/home/bla/[TRUNCATED]/chal/home/user/bin.elf'
[environment][readlink][DEBUG]: -> '/home/bla/[TRUNCATED]/file_sb/home/bla/[TRUNCATED]/chal/home/user/bin.elf'

try to solve absolute link targeting something in the sandbox

[environment][readlink][DEBUG]: readlink('/proc/self/exe')
[environment][resolve_path][DEBUG]: resolve_path(path='/proc/self/exe', follow_link=False)
[environment][resolve_path][DEBUG]: -> '/home/bla/[TRUNCATED]/file_sb/proc/self/exe'
[environment][resolve_path][DEBUG]: resolve_path(path='/home/bla/[TRUNCATED]/file_sb/home/user/bin.elf', follow_link=False)
[environment][resolve_path][DEBUG]: -> '/home/bla/[TRUNCATED]/file_sb/home/user/bin.elf'
[environment][readlink][DEBUG]: -> '/home/bla/[TRUNCATED]/file_sb/home/user/bin.elf'

try to solve absolute link targting something out of the sandbox

[syscalls][sys_generic_open][DEBUG]: sys_open('/proc/self/exe', 0, 0)
[environment][resolve_path][DEBUG]: resolve_path(path='/proc/self/exe', follow_link=True)
[environment][readlink][DEBUG]: readlink('/home/bla/[TRUNCATED]/file_sb/proc/self/exe')
[environment][resolve_path][DEBUG]: resolve_path(path='/home/bla/[TRUNCATED]/file_sb/proc/self/exe', follow_link=False)
[environment][resolve_path][DEBUG]: -> '/home/bla/[TRUNCATED]/file_sb/proc/self/exe'
[environment][resolve_path][DEBUG]: resolve_path(path='/tmp', follow_link=False)
[environment][resolve_path][DEBUG]: -> '/home/bla/[TRUNCATED]/file_sb/tmp'
[environment][readlink][DEBUG]: -> '/home/bla/[TRUNCATED]/file_sb/tmp'
[environment][resolve_path][DEBUG]: resolve_path(path='/home/bla/[TRUNCATED]/file_sb/tmp', follow_link=True)
[environment][resolve_path][DEBUG]: -> '/home/bla/[TRUNCATED]/file_sb/tmp'
[environment][resolve_path][DEBUG]: -> '/home/bla/[TRUNCATED]/file_sb/tmp'
[syscalls][syscall_x86_64_exception_handler][DEBUG]: -> ffffffffffffffff

@Sh3idan Sh3idan merged commit 5f1bd0c into fix/linux_env/resolve_path Dec 24, 2019
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant