Synopsis: iked fails to log when it receives unsupported configuration payload
types, making it difficult to diagnose when valid peer configurations are being
ignored.
Description:
The IKEv2 daemon (iked) currently has incomplete handling of configuration
payloads
received from peers. While iked supports sending various configuration types
(like INTERNAL_IP4_NETMASK, INTERNAL_IP4_NBNS, etc.), it only processes
INTERNAL_IP4_ADDRESS and INTERNAL_IP4_DNS when receiving configurations.
The more serious issue is that iked silently drops unsupported
configuration
types without any warning to administrators. This creates several problems:
1. Configuration asymmetry where iked appears to support options it cannot
process
2. No visibility into ignored configurations that may be critical for the
VPN
3. Potential security issues if network restrictions configured by peers
are dropped
4. Interoperability problems when valid peer configurations are ignored
This behavior violates the principle of least surprise - administrators
expect
configurations to either be processed or result in explicit warnings/errors.
Fix:
The proposed fix adds explicit logging when iked receives unsupported
configuration
types. This provides immediate visibility to administrators when
configurations
are being ignored, allowing them to:
1. Identify mismatched configuration expectations between peers
2. Debug interoperability issues
3. Determine if critical security configurations are being dropped
4. Make informed decisions about VPN configuration compatibility
The fix adds a default case in ikev2_pld_cp() that logs the configuration
type
and length being ignored. This is an intermediate fix while full
configuration
payload processing is implemented.
Future work should implement handlers for the remaining configuration types
to achieve feature parity between sent and received configurations.
The logging uses existing infrastructure (log_info) and includes:
- SA identifier for context
- Configuration type (mapped to human readable string)
- Configuration length for debugging
Index: ikev2_pld.c
===================================================================
RCS file: /cvs/src/sbin/iked/ikev2_pld.c,v
diff -u -p -u -r1.136 ikev2_pld.c
--- ikev2_pld.c 13 Jul 2024 12:22:46 -0000 1.136
+++ ikev2_pld.c 4 Jan 2025 17:16:56 -0000
@@ -2036,7 +2036,13 @@ ikev2_pld_cp(struct iked *env, struct ik
break;
}
break;
+ default:
+ log_info("%s: ignoring unsupported configuration type
%s length %d",
+ SPI_SA(msg->msg_sa, __func__),
+ print_map(cfg_type, ikev2_cfg_map),
+ betoh16(cfg->cfg_length));
+ break;
}
skip:
ptr += betoh16(cfg->cfg_length);