Re: Threat model for GNU Binutils

Siddhesh Poyarekar <[email protected]>
Newsgroups gmane.comp.gdb.devel,gmane.comp.gnu.binutils
Message-ID <[email protected]>
On 2023-04-14 09:12, Richard Earnshaw wrote:
> OK, I think it's time to take a step back.
> 
> If we are to have a security policy, I think we first need a threat 
> model.  Without it, we can't really argue about what we're trying to 
> protect against.
> 
> So the attached is my initial stab at trying to write down a threat 
> model.  Some of this is subjective, but I'm trying to be reasonably 
> realistic.  Most of these threats are really quite low in comparison to 
> other tools and services that run on your computer.
> 
> In practice, you then take the model and the impact/likelihood matrix 
> and decide what level of actions are needed for each combination - 
> whether it be from pre-emptive auditing through fixing bugs if found 
> down to do nothing.   But that's the step after we have the model agreed.
> 
> If you can think of threats I've missed (quite likely, I haven't thought 
> about this for long enough), then please suggest additions.

I assume you're proposing that this be added to SECURITY.md or similar? 
There are overlaps with what we intend for the first part of SECURITY.md.

> Threat model for GNU Binutils
> =============================
> 
> The following potential security threats have been identified in GNU
> Binutils.  Note that this does not mean that such a vulnerability is
> known to exist.

A threat model should define the nature of inputs because that makes the 
difference between something being considered a security threat vs being 
a regular bug.

> Threats arising from execution of the GNU Binutils programs
> -----------------------------------------------------------
> 
> 1) Privilege escalation.
> 
>   Nature:
>   A bug in the tools allows the user to gain privileges that they did not
>   already have.
> 
>   Likelihood: Low - tools do not run with elevated privileges, so this
>   would most likely involve a bug in the kernel.

A more general threat is crossing of privilege boundaries, which is not 
only user -> root but user1 -> user2.  So this won't necessarily involve 
kernel bugs.

>   Impact: Critical

Impact for security issues is done on a bug by bug basis, so stating 
impact doesn't really make sense.

> 
>   Mitigation: None

Sandboxing is the answer for everything :)

> 2) Denial of service
> 
>   Nature:
>   A bug in the tools leads to resources in the system becoming
>   unavailable on a temporary or permanent basis

The answer here changes based on whether the input is trusted or not.

> 
>   Likelihood: Low
> 
>   Impact: Low - tools are normally run under local user control and
>   not as daemons.
> 
>   Mitigation: sandboxing if access to the tools from a third party is
>   needed (eg a web service).
> 
> 3) Data corruption leads to uncontrolled program execution.
> 
>   Nature:
>   A bug such as unconstrained buffer overflow could lead to a ROP or JOP
>   style attack if not fully contained.  Once in control an attacker
>   might be able to access any file that the user running the program has
>   access to.

Likewise.

> 
>   Likelihood: Moderate
> 
>   Impact: High
> 
>   Mitigation: sandboxing can help if an attacker has direct control
>   over inputs supplied to the tools or in cases where the inputs are
>   particularly untrustworthy, but is not practical during normal
>   usage.
> 
> Threats arising from execution of output produced by GNU Binutils programs
> --------------------------------------------------------------------------
> 
> Note for this category we explicitly exclude threats that exist in the
> input files supplied to the tools and only consider threats introduced
> by the tools themselves.
> 
> 1) Incorrect generation of machine instructions leads to unintended
> program behavior.
> 
>   Nature:
>   Many architectures have 'don't care' bits in the machine instructions.
>   Generally the architecture will specify the value that such bits have,
>   leaving room for future expansion of the instruction set.  If tools do
>   not correctly set these bits then a program may execute correctly on
>   some machines, but fail on others.
> 
>   Likelihood: Low
> 
>   Impact: Moderate - this is unlikely to lead to an exploit, but might lead
>   to DoS in some cases.

The impact in this case is context dependent, so the impact will vary 
based on other factors, such as whether a PoC is available, how common 
the vulnerable code pattern would be, etc.

> 
>   Mitigation: cross testing generated output against third-party toolchain
>   implementations.
> 
> 2) Code directly generated by the tools contains a vulnerability
> 
>   Nature:
>   The vast majority of code output from the tools comes from the input
>   files supplied, but a small amount of 'glue' code might be needed in
>   some cases, for example to enable jumping to another function in
>   another part of the address space.  Linkers are also sometimes asked
>   to inject mitigations for known CPU errata when this cannot be done
>   during the compilation phase.

Since you've split this one out from machine instructions, there's a 
third category too; where binutils tools generate incorrect code for 
alignment of sections, sizes of sections, etc.  There's also a (rare) 
possibility of an infrequently used instruction having incorrect opcode 
mapping, resulting in a bug being masked when dumped with objdump or 
resulting code having undefined behaviour.

> 
>   Likelihood: low
> 
>   Impact: mostly low - the amount of code generated is very small and
>   unlikely to involve buffers that contain risky data, so the chances of
>   this directly leading to a vulnerability is low.
> 
>   Mitigation: monitor for processor vendor vulnerabilities and adjust tool
>   code generation if needed.

Sid
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.