Skip to content

Commit 6436b5c

Browse files
authored
add additional input sanitation to handlers (#240)
* add missing sanitization of input arguments to crypto handlers * protect input length checks against overflow * add more missing checks
1 parent 04b199f commit 6436b5c

File tree

3 files changed

+287
-50
lines changed

3 files changed

+287
-50
lines changed

src/wh_server_cert.c

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -387,10 +387,28 @@ int wh_Server_HandleCertRequest(whServerContext* server, uint16_t magic,
387387
whMessageCert_SimpleResponse resp = {0};
388388
const uint8_t* cert_data;
389389

390+
/* Validate minimum size */
391+
if (req_size < sizeof(whMessageCert_AddTrustedRequest)) {
392+
resp.rc = WH_ERROR_BADARGS;
393+
wh_MessageCert_TranslateSimpleResponse(
394+
magic, &resp, (whMessageCert_SimpleResponse*)resp_packet);
395+
*out_resp_size = sizeof(resp);
396+
break;
397+
}
398+
390399
/* Convert request struct */
391400
wh_MessageCert_TranslateAddTrustedRequest(
392401
magic, (whMessageCert_AddTrustedRequest*)req_packet, &req);
393402

403+
/* Validate certificate data fits within request */
404+
if (req.cert_len > req_size - sizeof(req)) {
405+
resp.rc = WH_ERROR_BADARGS;
406+
wh_MessageCert_TranslateSimpleResponse(
407+
magic, &resp, (whMessageCert_SimpleResponse*)resp_packet);
408+
*out_resp_size = sizeof(resp);
409+
break;
410+
}
411+
394412
/* Get pointer to certificate data */
395413
cert_data = (const uint8_t*)req_packet + sizeof(req);
396414

src/wh_server_counter.c

Lines changed: 34 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,8 +42,6 @@ int wh_Server_HandleCounter(whServerContext* server, uint16_t magic,
4242
const void* req_packet, uint16_t* out_resp_size,
4343
void* resp_packet)
4444
{
45-
(void)req_size;
46-
4745
whKeyId counterId = 0;
4846
int ret = 0;
4947
whNvmMetadata meta[1] = {{0}};
@@ -59,6 +57,14 @@ int wh_Server_HandleCounter(whServerContext* server, uint16_t magic,
5957
whMessageCounter_InitRequest req = {0};
6058
whMessageCounter_InitResponse resp = {0};
6159

60+
if (req_size < sizeof(whMessageCounter_InitRequest)) {
61+
resp.rc = WH_ERROR_BADARGS;
62+
(void)wh_MessageCounter_TranslateInitResponse(
63+
magic, &resp, (whMessageCounter_InitResponse*)resp_packet);
64+
*out_resp_size = sizeof(resp);
65+
return WH_ERROR_OK;
66+
}
67+
6268
/* translate request */
6369
(void)wh_MessageCounter_TranslateInitRequest(
6470
magic, (whMessageCounter_InitRequest*)req_packet, &req);
@@ -87,6 +93,15 @@ int wh_Server_HandleCounter(whServerContext* server, uint16_t magic,
8793
whMessageCounter_IncrementRequest req = {0};
8894
whMessageCounter_IncrementResponse resp = {0};
8995

96+
if (req_size < sizeof(whMessageCounter_IncrementRequest)) {
97+
resp.rc = WH_ERROR_BADARGS;
98+
(void)wh_MessageCounter_TranslateIncrementResponse(
99+
magic, &resp,
100+
(whMessageCounter_IncrementResponse*)resp_packet);
101+
*out_resp_size = sizeof(resp);
102+
return WH_ERROR_OK;
103+
}
104+
90105
/* translate request */
91106
(void)wh_MessageCounter_TranslateIncrementRequest(
92107
magic, (whMessageCounter_IncrementRequest*)req_packet, &req);
@@ -133,6 +148,14 @@ int wh_Server_HandleCounter(whServerContext* server, uint16_t magic,
133148
whMessageCounter_ReadRequest req = {0};
134149
whMessageCounter_ReadResponse resp = {0};
135150

151+
if (req_size < sizeof(whMessageCounter_ReadRequest)) {
152+
resp.rc = WH_ERROR_BADARGS;
153+
(void)wh_MessageCounter_TranslateReadResponse(
154+
magic, &resp, (whMessageCounter_ReadResponse*)resp_packet);
155+
*out_resp_size = sizeof(resp);
156+
return WH_ERROR_OK;
157+
}
158+
136159
/* translate request */
137160
(void)wh_MessageCounter_TranslateReadRequest(
138161
magic, (whMessageCounter_ReadRequest*)req_packet, &req);
@@ -164,6 +187,15 @@ int wh_Server_HandleCounter(whServerContext* server, uint16_t magic,
164187
whMessageCounter_DestroyRequest req = {0};
165188
whMessageCounter_DestroyResponse resp = {0};
166189

190+
if (req_size < sizeof(whMessageCounter_DestroyRequest)) {
191+
resp.rc = WH_ERROR_BADARGS;
192+
(void)wh_MessageCounter_TranslateDestroyResponse(
193+
magic, &resp,
194+
(whMessageCounter_DestroyResponse*)resp_packet);
195+
*out_resp_size = sizeof(resp);
196+
return WH_ERROR_OK;
197+
}
198+
167199
/* translate request */
168200
(void)wh_MessageCounter_TranslateDestroyRequest(
169201
magic, (whMessageCounter_DestroyRequest*)req_packet, &req);

0 commit comments

Comments
 (0)