AdminModule: don't return the device private key to remote config reads (#11030)
A SECURITY_CONFIG get_config response copied config.security verbatim, so a remote request was answered with the device identity private_key and sent over the air. Only the local owner needs it, for backup. Zero private_key in the SECURITY_CONFIG response when the request is remote (from != 0); the local BLE/USB/TCP path (from == 0) still receives it. public_key and admin_key are public and stay as they were.
This commit is contained in:
co-authored by
GitHub
parent
f18a8b0552
commit
d3d02af817
@@ -1408,6 +1408,15 @@ void AdminModule::handleGetConfig(const meshtastic_MeshPacket &req, const uint32
|
||||
LOG_INFO("Get config: Security");
|
||||
res.get_config_response.which_payload_variant = meshtastic_Config_security_tag;
|
||||
res.get_config_response.payload_variant.security = config.security;
|
||||
// The device identity private key is backup material for the local owner only. A local
|
||||
// admin client sets from == 0 (BLE/USB/TCP); never return the key to a remote requester,
|
||||
// even an authorized one, since it would travel over the air. public_key/admin_key are
|
||||
// public and stay put.
|
||||
if (req.from != 0) {
|
||||
auto &sec = res.get_config_response.payload_variant.security;
|
||||
memset(sec.private_key.bytes, 0, sizeof(sec.private_key.bytes));
|
||||
sec.private_key.size = 0;
|
||||
}
|
||||
break;
|
||||
case meshtastic_AdminMessage_ConfigType_SESSIONKEY_CONFIG:
|
||||
LOG_INFO("Get config: Sessionkey");
|
||||
|
||||
Reference in New Issue
Block a user