Hello Hugo,

On 2024-11-07 08:09, Hugo V.C. wrote:
Can or can not the kernel be crashed in a exploitable way? An seL4
system halt is not a problem to me. An execution manipulation at
kernel level it would be. A halt is a halt. No problem. But seL4 is
formally verified, so, my concern is if an attacker can do more than
halting the seL4.

The bugs are normally limited to halting the kernel in both cases for all
user space setups:

- The cache invalidate causes a halt because there is no write access.
  This is a user space app calling cache maintenance syscalls on a page
  cap that is mapped read-only. Here seL4 was more permissive than the
actual hardware. The only problem is the kernel halt, there are no other
  side effects.

- The VCPU bug only affects ARM SMP configurations (otherwise it would have been found by verification). Normally the kernel has no memory mapped at address 0, you can check the memory map to verify if this is the case for your platform. If there is no mapping for address 0, the kernel will halt
  and there are no other side effects.

The rest of the analysis is for the highly unlikely case that you do run
an unverified kernel build on SMP ARM with HYP enabled, where an untrusted or compromised task has a cap to a disassociated VCPU, with a kernel that
has memory mapped starting at address 0:

If for some reason it has, the NULL access itself is limited to a read of the NULL TCB's affinity, which will be used to decide whether to send an IPI
and to which core (offset depends on the size of arch_tcb_t, but will be
less than 4kb). If you have device memory at that address, that read may
have some side effect (although I think ARM hardware usually doesn't).
Otherwise that invalid read itself will have no side-effects and is harmless.

If it reads a valid core affinity, then things end up harmless:
handleVCPUInjectInterruptIPI() will handle the IPI and do what was requested, it doesn't use or touch the NULL TCB in any way, it just does some internal
bookkeeping.

If it reads an invalid core affinity, things get more interesting. It will try to send an IPI to core >= NUM_CORES. This results in an out-of-bound write past big_kernel_lock.node_owners[] in generic_ipi_send_mask(). The write is limited to writing the value '1' to the third word in one 64 or 32 bytes aligned chunk past the big kernel lock, limited in range to about 64 or 32 * 64 bytes, for 64-bit and 32-bit platforms respectively (less if L1 cache lines are 32 bytes).

You can check your kernel.elf binary to see what could be affected this way if you're interested. If you're unlucky it's within range of the kernel stack and
the attacker can modify one stack word to the value of 1.

Assuming the attacker has no control over memory content at address 0-4kb, this is most likely useless, as they can't choose the address, nor the value written. This one write is all they get, because after that the kernel will hang forever in ipi_wait(), without releasing the big kernel lock, so any write they did to
kernel memory can't affect other cores either.

If the attacker has control over address range 0-4kb and all other requirements are met, and the attacker gets very lucky, then the VCPU bug might be enough to take over the system. But it's still very unlikely, as all they can write is 1 to limited memory targets. That one write has to both escalate privileges and avoid the hang in ipi_wait() to be useful. They can't unlock the kernel lock
because that requires a write of 0 to the wrong offset.


This kind of questions are not just for fun guys, this is what
customers will ask you every single time a non verified code bug
arises. And the infosec community needs that kind of analysis to
increase trust.

Usually customers understand their own system enough to know whether
a bug affects their system or not. An analysis like I did above is
required for your specific system before you can be assured that
known bugs don't affect your systems.

Greetings,

Indan


Thank you in advance 🙏

On Tuesday, November 5, 2024, Indan Zupancic <in...@nul.nu> wrote:
Hello Hugo,

The bugs you listed are only a problem for untrusted code. That is,
it gives
threads with vcpu control or vspace caps the ability to cause a
system halt,
effectively giving them more rights than they should have, hence it
being a
vulnerability. But those operations, if done in good faith, would be
user
space bugs.

In the case of the webserver example, if you can trigger either of
the two bugs
in any way, with a current kernel it will avoid the kernel crashing,
but it will
still mean your user space will most likely be broken, resulting in
the same end
user experience of a non-working system. Because as far as I know,
the webserver
example has no fault detection, recovery or restart mechanism
implemented.

Greetings,

Indan

On 2024-11-05 10:34, Hugo V.C. wrote:

Hi Gerwin,

thanks for the fast response! Yes, this.I already know. But I'm
interested
in this specific case:

https://docs.sel4.systems/projects/sel4webserver/

as I guess it may not vulnerable as this example (by default) does
not run
SMP seL4. For "for cache maintenance ops" I'm not sure as this qemu
environment. Any hints?

On Tuesday, November 5, 2024, Gerwin Klein <kle...@unsw.edu.au>
wrote:

HI Hugo,
The CHANGES.md file lists the vulnerable versions of seL4 for each
of

these (https://github.com/seL4/seL4/blob/master/CHANGES.md)

- for VCPU/SMP: seL4 versions 12.0.0 and 12.1.0.
- for cache maintenance ops on AArch64: all versions before 13.0.0
from

5.0.0

Cheers,
Gerwin

On 5 Nov 2024, at 10:02, Hugo V.C. <skydive...@gmail.com> wrote:
I'm forwarding this question here (tried on Mattermost Trustworthy
Systems
group first) hoping someone can put some light on this?

---

Hi, I'm having a look to the vulns (in areas of the kernel that
have not
been formally verified) patched in seL4 13.0.0.

We have:

1) "NULL pointer dereference when injecting an IRQ for a
non-associated
VCPU on SMP configurations." 2) "On AArch64, when seL4 runs in EL1
the
kernel would fault with a data abort in
seL4_ARM_Page_Invalidate_Data and
seL4_ARM_VSpace_Invalidate_Data when the user requested a dc ivac
cache
maintenance operation on a page that is not mapped writeable."

Extremely simple question: running version < 13.0.0 on top of Qemu
(in
example like https://docs.sel4.systems/projects/sel4webserver/)
would it

be

vulnerable to any of those?

---

Best,

_______________________________________________
Devel mailing list -- devel@sel4.systems
To unsubscribe send an email to devel-leave@sel4.systems

Reply via email to