Sorry if this is unwelcome, but this discussion is a bit alarming. If there
is a conceivable exploit anywhere, it is a vulnerability that should be
contained. I wrote a post about Murphy's Law because the entry on it in
Wikipedia is woefully incorrect and it appears that somehow the zeitgeist
now has Murphy's Law as just a humorous observation and nothing more. It's
a real thing that systems people should understand and respect.

https://blog.bobtrower.com/2024/06/murphys-law-is-not-simply-adage.html

Note that you can comfortably say that a given random selection from, say,
2^1024 is improbable to the point of impossibility, but you *cannot* be
certain that the selection is random.

Cheers!

On Thu, Nov 7, 2024 at 3:31 PM Hugo V.C. <skydive...@gmail.com> wrote:

> "But it's still very unlikely, as all they can write is 1
> to limited memory targets."
>
> Interesting. Moreover as we are talking about a system with static memory
> definitions (no need to bypass any KASLR...) so, if the attacker is very,
> very lucky and the overwrited memory region is profitable, we would have an
> ultrareliable exploit. But as per your explanations, look very difficult.
>
> BTW: writing "1" in the right place can be fatal. Would be nice to test
> what ca be achieved.
>
> "Usually customers understand their own system enough to know whether
> > a bug affects their system or not."
>
> Unfortunately here I strongly disagree. My experience is many times even
> the software developers don't get the full impact of a bug (that's why we
> have those patches for vulns in well known OSs that don't really patch and
> things get exploited again).
>
> When it comes to memory bugs, things can become very weird in terms of
> knowing the impact. Fortunately in seL4 environment bugs impact are
> "easier" to be defined as things in the kernel are "static". The bad news
> is this also helps attackers.
>
> If I were you guys I would create an exploitable environment and would try
> to exploit it. Just for fun. Just to learn. Maybe you get a surprise.
>
> On page 210 of this document (https://www.pentest.es/checkpoint_hack.pdf)
> there's (at that time, year 2007, a 0day) for a memory vulnerability that
> was supposed to be "almost impossible to exploit" as there were many
> protections in place. At the end an exploit was possible. It took me few
> months, but I did it. At that time ROP technique still didn't existed (in
> fact this document is the genesys) so exploitation was painful. Nowadays
> everything is automated.
>
> If there's a way to exploit the bug you described, I bet it will be
> exploited.
> Attackers like to learn.
> Probably someone is reading this and considering seL4 targets military
> environments, yes, looks interesting.
>
> And almost never you will have 100% verified code, so to me looks very
> interesting to research what is the impact of bugs in unverified code when
> they interact with verified code.
>
> Maybe we learn something. And for sure we will have fun.
>
>
>
> On Thursday, November 7, 2024, Indan Zupancic <in...@nul.nu> wrote:
> > 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
>


-- 
Bob Trower
--- From Gmail webmail account. ---
_______________________________________________
Devel mailing list -- devel@sel4.systems
To unsubscribe send an email to devel-leave@sel4.systems

Reply via email to