Apply Phase 9D security mitigations
- Add fail-closed wolfSSL small-math policy and vectors - Backport DHCP, EMS, and X.509 allocation fixes - Extend source override validation and operational documentation
This commit is contained in:
@@ -31,11 +31,29 @@ set_property(DIRECTORY APPEND PROPERTY CMAKE_CONFIGURE_DEPENDS
|
||||
|
||||
# Public extension point: the Python Entry registry supplies the mapping. This
|
||||
# function is backend-agnostic; a later pinned project/vendor source uses it too.
|
||||
function(sak_security_replace_source component original generated)
|
||||
function(sak_security_replace_source component original generated nested_target)
|
||||
idf_component_get_property(_target "${component}" COMPONENT_LIB)
|
||||
if(NOT TARGET "${_target}")
|
||||
message(FATAL_ERROR "Security override: missing component target ${component}")
|
||||
endif()
|
||||
if(NOT "${nested_target}" STREQUAL "")
|
||||
if(NOT component STREQUAL "mbedtls" OR
|
||||
NOT nested_target MATCHES "^(mbedtls|mbedx509|mbedcrypto)$")
|
||||
message(FATAL_ERROR "Security override: invalid nested target ${component}/${nested_target}")
|
||||
endif()
|
||||
if(NOT TARGET "${nested_target}")
|
||||
message(FATAL_ERROR "Security override: missing nested target ${nested_target}")
|
||||
endif()
|
||||
set(_target "${nested_target}")
|
||||
get_target_property(_imported "${_target}" IMPORTED)
|
||||
get_target_property(_alias "${_target}" ALIASED_TARGET)
|
||||
get_target_property(_owner_dir "${_target}" SOURCE_DIR)
|
||||
get_filename_component(_owner_dir "${_owner_dir}" REALPATH)
|
||||
get_filename_component(_expected_owner "${_sak_security_idf}/components/mbedtls/mbedtls/library" REALPATH)
|
||||
if(_imported OR _alias OR NOT _owner_dir STREQUAL _expected_owner)
|
||||
message(FATAL_ERROR "Security override: unexpected nested target owner ${_target}: ${_owner_dir}")
|
||||
endif()
|
||||
endif()
|
||||
get_target_property(_source_dir "${_target}" SOURCE_DIR)
|
||||
get_target_property(_sources "${_target}" SOURCES)
|
||||
get_filename_component(_expected "${original}" REALPATH)
|
||||
@@ -98,5 +116,6 @@ foreach(_sak_security_id IN LISTS SAK_SECURITY_OVERRIDE_IDS)
|
||||
sak_security_replace_source(
|
||||
"${SAK_SECURITY_${_sak_security_id}_COMPONENT}"
|
||||
"${SAK_SECURITY_${_sak_security_id}_ORIGINAL}"
|
||||
"${SAK_SECURITY_${_sak_security_id}_GENERATED}")
|
||||
"${SAK_SECURITY_${_sak_security_id}_GENERATED}"
|
||||
"${SAK_SECURITY_${_sak_security_id}_TARGET}")
|
||||
endforeach()
|
||||
|
||||
@@ -0,0 +1,9 @@
|
||||
# SPDX-License-Identifier: GPL-3.0-only
|
||||
# Apply after project(). PUBLIC propagates the resolved-settings guard to every
|
||||
# wolfSSL consumer, including wolfSSH and the application (ABI-sensitive keys).
|
||||
idf_component_get_property(_sak_wolf_target wolfssl__wolfssl COMPONENT_LIB)
|
||||
if(NOT TARGET "${_sak_wolf_target}")
|
||||
message(FATAL_ERROR "wolf crypto policy: missing wolfSSL component target")
|
||||
endif()
|
||||
target_compile_options("${_sak_wolf_target}" PUBLIC
|
||||
"-include${CMAKE_CURRENT_LIST_DIR}/wolf_crypto_policy.h")
|
||||
@@ -0,0 +1,27 @@
|
||||
/* SPDX-License-Identifier: GPL-3.0-only */
|
||||
#ifndef SAK_WOLF_CRYPTO_POLICY_H
|
||||
#define SAK_WOLF_CRYPTO_POLICY_H
|
||||
|
||||
#include <wolfssl/wolfcrypt/settings.h>
|
||||
|
||||
/* PR9275 selects small math on Xtensa to avoid compiler-introduced timing
|
||||
* differences. Check resolved settings, not just command-line intentions.
|
||||
* https://github.com/wolfSSL/wolfssl/pull/9275
|
||||
*/
|
||||
#if !defined(HAVE_CURVE25519) || !defined(CURVE25519_SMALL)
|
||||
#error "wolf crypto policy: X25519 requires CURVE25519_SMALL"
|
||||
#endif
|
||||
#if !defined(HAVE_ED25519) || !defined(ED25519_SMALL)
|
||||
#error "wolf crypto policy: Ed25519 requires ED25519_SMALL"
|
||||
#endif
|
||||
/* 5.8.2 excludes small math from automatic blinding and rejects this pairing.
|
||||
* Do not force blinding back on: key layout and function signatures differ.
|
||||
*/
|
||||
#ifdef WOLFSSL_CURVE25519_BLINDING
|
||||
#error "wolf crypto policy: small X25519 is incompatible with blinding"
|
||||
#endif
|
||||
#if defined(HAVE_CURVE448) || defined(HAVE_ED448)
|
||||
#error "wolf crypto policy: review PR9275 small math before enabling 448"
|
||||
#endif
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user