mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-09-18 23:09:29 +02:00
AF_ALG is a frequent source of vulnerabilities and a maintenance nightmare. It exposes far more functionality to userspace than ever should have been exposed, especially to unprivileged processes. Recent exploits have targeted kernel internal implementation details like "authencesn" that have zero use case for userspace access. Fortunately, AF_ALG is rarely used in practice, as userspace crypto libraries exist. And when it is used, only some functionality is known to be used, and many users are known to hold capabilities already. iwd for example requires CAP_NET_ADMIN and has a known algorithm list (https://lore.kernel.org/linux-crypto/bcbbef00-5881-421b-8892-7be6c04b832d@gmail.com/). Thus, let's restrict the set of allowed algorithms by default, depending on the capabilities held. Add a sysctl /proc/sys/crypto/af_alg_restrict with meaning: 0: unrestricted 1: limited functionality 2: completely disabled Set the default value to 1, which enables an algorithm allowlist for unprivileged processes and a slightly longer allowlist for privileged processes. Note that the list may be tweaked in the future. However, the common use cases such as iwd and bluez are taken into account already. I've tested that iwd still works with the default value of 1. Signed-off-by: Eric Biggers <ebiggers@kernel.org> Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
84 lines
2.9 KiB
ReStructuredText
84 lines
2.9 KiB
ReStructuredText
=================
|
|
/proc/sys/crypto/
|
|
=================
|
|
|
|
These files show up in ``/proc/sys/crypto/``, depending on the
|
|
kernel configuration:
|
|
|
|
.. contents:: :local:
|
|
|
|
.. _af_alg_restrict:
|
|
|
|
af_alg_restrict
|
|
===============
|
|
|
|
Controls the level of restriction of AF_ALG.
|
|
|
|
AF_ALG is a deprecated and rarely-used userspace interface that is a
|
|
frequent source of vulnerabilities. It also unnecessarily exposes a
|
|
large number of kernel implementation details. For more information
|
|
about AF_ALG, see :ref:`Documentation/crypto/userspace-if.rst
|
|
<crypto_userspace_interface>`.
|
|
|
|
Starting in Linux v7.3, AF_ALG supports only a limited set of
|
|
algorithms by default. This sysctl allows the system administrator to
|
|
remove this restriction when needed for compatibility reasons, or to
|
|
go further and disable AF_ALG entirely. The default value is 1.
|
|
|
|
=== ==================================================================
|
|
0 AF_ALG is unrestricted.
|
|
|
|
1 AF_ALG is supported with a limited list of algorithms. The list
|
|
is designed for compatibility with known users such as iwd and
|
|
bluez that haven't yet been fixed to use userspace crypto code.
|
|
|
|
Specifically, there is an allowlist for unprivileged processes
|
|
and a somewhat longer allowlist for processes that hold
|
|
CAP_SYS_ADMIN or CAP_NET_ADMIN in the initial user namespace.
|
|
|
|
Attempts to bind() an AF_ALG socket with a disallowed algorithm
|
|
fail with ENOENT.
|
|
|
|
2 AF_ALG is completely disabled. Attempts to create an AF_ALG
|
|
socket fail with EAFNOSUPPORT.
|
|
=== ==================================================================
|
|
|
|
fips_enabled
|
|
============
|
|
|
|
Read-only flag that indicates whether FIPS mode is enabled.
|
|
|
|
- ``0``: FIPS mode is disabled (default).
|
|
- ``1``: FIPS mode is enabled.
|
|
|
|
This value is set at boot time via the ``fips=1`` kernel command line
|
|
parameter. When enabled, the cryptographic API will restrict the use
|
|
of certain algorithms and perform self-tests to ensure compliance with
|
|
FIPS (Federal Information Processing Standards) requirements, such as
|
|
FIPS 140-2 and the newer FIPS 140-3, depending on the kernel
|
|
configuration and the module in use.
|
|
|
|
fips_name
|
|
=========
|
|
|
|
Read-only file that contains the name of the FIPS module currently in use.
|
|
The value is typically configured via the ``CONFIG_CRYPTO_FIPS_NAME``
|
|
kernel configuration option.
|
|
|
|
fips_version
|
|
============
|
|
|
|
Read-only file that contains the version string of the FIPS module.
|
|
If ``CONFIG_CRYPTO_FIPS_CUSTOM_VERSION`` is set, it uses the value from
|
|
``CONFIG_CRYPTO_FIPS_VERSION``. Otherwise, it defaults to the kernel
|
|
release version (``UTS_RELEASE``).
|
|
|
|
Copyright (c) 2026, Shubham Chakraborty <chakrabortyshubham66@gmail.com>
|
|
|
|
For general info and legal blurb, please look in
|
|
Documentation/admin-guide/sysctl/index.rst.
|
|
|
|
.. See scripts/check-sysctl-docs to keep this up to date:
|
|
.. scripts/check-sysctl-docs -vtable="crypto" \
|
|
.. $(git grep -l register_sysctl_)
|