second pass adding beacons admin (#10839)
* second pass adding beacons admin * Bump protobufs submodule to merged MESHBEACON_CONFIG (PR #970) clod helped. * Gate MeshBeacon module config behind admin auth in PhoneAPI The FromRadio module-config sync copied moduleConfig.mesh_beacon unconditionally. MeshBeaconConfig embeds two ChannelSettings (broadcast_offer_channel, broadcast_on_channel) that carry PSKs, so an unauthorized client could exfiltrate channel PSKs when MESHTASTIC_PHONEAPI_ACCESS_CONTROL is enabled - bypassing the redaction already applied to mqtt/network/security config. Gate the payload copy on getAdminAuthorized(), mirroring the mqtt case; unauth clients now receive an empty MeshBeaconConfig. clod helped
This commit is contained in:
+1
-1
Submodule protobufs updated: 9a120bb5a4...ba16bfc731
@@ -897,6 +897,23 @@ size_t PhoneAPI::getFromRadio(uint8_t *buf)
|
|||||||
fromRadioScratch.moduleConfig.which_payload_variant = meshtastic_ModuleConfig_tak_tag;
|
fromRadioScratch.moduleConfig.which_payload_variant = meshtastic_ModuleConfig_tak_tag;
|
||||||
fromRadioScratch.moduleConfig.payload_variant.tak = moduleConfig.tak;
|
fromRadioScratch.moduleConfig.payload_variant.tak = moduleConfig.tak;
|
||||||
break;
|
break;
|
||||||
|
#if !MESHTASTIC_EXCLUDE_BEACON
|
||||||
|
case meshtastic_ModuleConfig_mesh_beacon_tag:
|
||||||
|
LOG_DEBUG("Send module config: mesh beacon");
|
||||||
|
fromRadioScratch.moduleConfig.which_payload_variant = meshtastic_ModuleConfig_mesh_beacon_tag;
|
||||||
|
#ifdef MESHTASTIC_PHONEAPI_ACCESS_CONTROL
|
||||||
|
if (!getAdminAuthorized()) {
|
||||||
|
// Unauthenticated: emit an empty MeshBeaconConfig (zero-init from
|
||||||
|
// the top-of-loop memset). The embedded ChannelSettings
|
||||||
|
// (broadcast_offer_channel / broadcast_on_channel) carry PSKs that
|
||||||
|
// must not be visible to an unauth client.
|
||||||
|
} else
|
||||||
|
#endif
|
||||||
|
{
|
||||||
|
fromRadioScratch.moduleConfig.payload_variant.mesh_beacon = moduleConfig.mesh_beacon;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
default:
|
default:
|
||||||
LOG_DEBUG("Unhandled module config type %d", config_state);
|
LOG_DEBUG("Unhandled module config type %d", config_state);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -83,7 +83,9 @@ typedef enum _meshtastic_AdminMessage_ModuleConfigType {
|
|||||||
/* Traffic management module config */
|
/* Traffic management module config */
|
||||||
meshtastic_AdminMessage_ModuleConfigType_TRAFFICMANAGEMENT_CONFIG = 14,
|
meshtastic_AdminMessage_ModuleConfigType_TRAFFICMANAGEMENT_CONFIG = 14,
|
||||||
/* TAK module config */
|
/* TAK module config */
|
||||||
meshtastic_AdminMessage_ModuleConfigType_TAK_CONFIG = 15
|
meshtastic_AdminMessage_ModuleConfigType_TAK_CONFIG = 15,
|
||||||
|
/* Mesh Beacon module config */
|
||||||
|
meshtastic_AdminMessage_ModuleConfigType_MESHBEACON_CONFIG = 16
|
||||||
} meshtastic_AdminMessage_ModuleConfigType;
|
} meshtastic_AdminMessage_ModuleConfigType;
|
||||||
|
|
||||||
typedef enum _meshtastic_AdminMessage_BackupLocation {
|
typedef enum _meshtastic_AdminMessage_BackupLocation {
|
||||||
@@ -510,8 +512,8 @@ extern "C" {
|
|||||||
#define _meshtastic_AdminMessage_ConfigType_ARRAYSIZE ((meshtastic_AdminMessage_ConfigType)(meshtastic_AdminMessage_ConfigType_DEVICEUI_CONFIG+1))
|
#define _meshtastic_AdminMessage_ConfigType_ARRAYSIZE ((meshtastic_AdminMessage_ConfigType)(meshtastic_AdminMessage_ConfigType_DEVICEUI_CONFIG+1))
|
||||||
|
|
||||||
#define _meshtastic_AdminMessage_ModuleConfigType_MIN meshtastic_AdminMessage_ModuleConfigType_MQTT_CONFIG
|
#define _meshtastic_AdminMessage_ModuleConfigType_MIN meshtastic_AdminMessage_ModuleConfigType_MQTT_CONFIG
|
||||||
#define _meshtastic_AdminMessage_ModuleConfigType_MAX meshtastic_AdminMessage_ModuleConfigType_TAK_CONFIG
|
#define _meshtastic_AdminMessage_ModuleConfigType_MAX meshtastic_AdminMessage_ModuleConfigType_MESHBEACON_CONFIG
|
||||||
#define _meshtastic_AdminMessage_ModuleConfigType_ARRAYSIZE ((meshtastic_AdminMessage_ModuleConfigType)(meshtastic_AdminMessage_ModuleConfigType_TAK_CONFIG+1))
|
#define _meshtastic_AdminMessage_ModuleConfigType_ARRAYSIZE ((meshtastic_AdminMessage_ModuleConfigType)(meshtastic_AdminMessage_ModuleConfigType_MESHBEACON_CONFIG+1))
|
||||||
|
|
||||||
#define _meshtastic_AdminMessage_BackupLocation_MIN meshtastic_AdminMessage_BackupLocation_FLASH
|
#define _meshtastic_AdminMessage_BackupLocation_MIN meshtastic_AdminMessage_BackupLocation_FLASH
|
||||||
#define _meshtastic_AdminMessage_BackupLocation_MAX meshtastic_AdminMessage_BackupLocation_SD
|
#define _meshtastic_AdminMessage_BackupLocation_MAX meshtastic_AdminMessage_BackupLocation_SD
|
||||||
|
|||||||
@@ -1487,6 +1487,13 @@ void AdminModule::handleGetModuleConfig(const meshtastic_MeshPacket &req, const
|
|||||||
res.get_module_config_response.which_payload_variant = meshtastic_ModuleConfig_traffic_management_tag;
|
res.get_module_config_response.which_payload_variant = meshtastic_ModuleConfig_traffic_management_tag;
|
||||||
res.get_module_config_response.payload_variant.traffic_management = moduleConfig.traffic_management;
|
res.get_module_config_response.payload_variant.traffic_management = moduleConfig.traffic_management;
|
||||||
break;
|
break;
|
||||||
|
#if !MESHTASTIC_EXCLUDE_BEACON
|
||||||
|
case meshtastic_AdminMessage_ModuleConfigType_MESHBEACON_CONFIG:
|
||||||
|
configName = "MeshBeacon";
|
||||||
|
res.get_module_config_response.which_payload_variant = meshtastic_ModuleConfig_mesh_beacon_tag;
|
||||||
|
res.get_module_config_response.payload_variant.mesh_beacon = moduleConfig.mesh_beacon;
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
LOG_INFO("Get module config: %s", configName);
|
LOG_INFO("Get module config: %s", configName);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user