/sys/kernel/security/apparmor/.load
/usr/bin/time
# Check if AppArmor is loaded
aa-status 2>/dev/null && echo "AppArmor ACTIVE - check kernel version" || echo "AppArmor not active" # Check kernel version (v4.11+ is vulnerable if AppArmor is active)
uname -r
# Check if AppArmor is loaded
aa-status 2>/dev/null && echo "AppArmor ACTIVE - check kernel version" || echo "AppArmor not active" # Check kernel version (v4.11+ is vulnerable if AppArmor is active)
uname -r
# Check if AppArmor is loaded
aa-status 2>/dev/null && echo "AppArmor ACTIVE - check kernel version" || echo "AppArmor not active" # Check kernel version (v4.11+ is vulnerable if AppArmor is active)
uname -r
apt update && apt upgrade
apt update && apt upgrade
zypper refresh && zypper update
sudo apt update && sudo apt upgrade -y linux-image-$(uname -r)
sudo reboot
sudo apt update && sudo apt upgrade -y linux-image-$(uname -r)
sudo reboot
sudo apt update && sudo apt upgrade -y linux-image-$(uname -r)
sudo reboot
sudo zypper refresh && sudo zypper update kernel-default
sudo reboot
sudo zypper refresh && sudo zypper update kernel-default
sudo reboot
sudo zypper refresh && sudo zypper update kernel-default
sudo reboot
# List all loaded profiles and enforcement mode
aa-status # Check for unexpected profiles
ls /etc/apparmor.d/ # Verify no profiles were modified recently
find /etc/apparmor.d/ -mtime -7 -ls
# List all loaded profiles and enforcement mode
aa-status # Check for unexpected profiles
ls /etc/apparmor.d/ # Verify no profiles were modified recently
find /etc/apparmor.d/ -mtime -7 -ls
# List all loaded profiles and enforcement mode
aa-status # Check for unexpected profiles
ls /etc/apparmor.d/ # Verify no profiles were modified recently
find /etc/apparmor.d/ -mtime -7 -ls
# Ensure AppArmor annotations are enforced on pods
metadata: annotations: container.apparmor.security.beta.kubernetes.io/my-container: runtime/default
# Ensure AppArmor annotations are enforced on pods
metadata: annotations: container.apparmor.security.beta.kubernetes.io/my-container: runtime/default
# Ensure AppArmor annotations are enforced on pods
metadata: annotations: container.apparmor.security.beta.kubernetes.io/my-container: runtime/default - Attacker gains shell inside a container (compromised app, RCE in a dependency)
- Exploits CrackArmor to escape to the host node
- From the host, accesses all other containers on that node
- Kubernetes AppArmor security boundary = nullified - Kubernetes worker/control-plane nodes
- CI/CD runners (GitHub Actions self-hosted, GitLab runners, Jenkins agents)
- Docker hosts
- Network appliances and firewalls on Linux
- Jump boxes and bastion hosts - Defense in depth isn't optional. AppArmor was one layer. When it failed, containers, namespaces, and privilege boundaries all failed together. Layer your controls independently — don't rely on a single MAC framework.
- Know your attack surface. CrackArmor needs local access first. Your SSH hardening, network access controls, and authentication policies are the real first line. If an attacker can't get local access, CrackArmor is irrelevant.
- Patch management is engineering, not ops. The ability to rapidly identify, test, and deploy kernel patches across heterogeneous infrastructure is a core engineering competency — not an afterthought.