udev: Add id program and rule for FIDO security tokens

Add a fido_id program meant to be run for devices in the hidraw
subsystem via an IMPORT directive. The program parses the HID report
descriptor and assigns the ID_SECURITY_TOKEN environment variable if a
declared usage matches the FIDO_CTAPHID_USAGE declared in the FIDO CTAP
specification. This replaces the previous approach of whitelisting all
known security token models manually.

This commit is accompanied by a test suite and a fuzzer target for the
descriptor parsing routine.

Fixes: #11996.
This commit is contained in:
Fabian Henneke
2019-09-07 02:23:58 +09:00
committed by Yu Watanabe
parent 1e19f5ac0d
commit d45ee2f31a
15 changed files with 333 additions and 0 deletions
+23
View File
@@ -0,0 +1,23 @@
/* SPDX-License-Identifier: LGPL-2.1+ */
#include <linux/hid.h>
#include <stdbool.h>
#include <stdint.h>
#include <stdlib.h>
#include "fido_id/fido_id_desc.h"
#include "fuzz.h"
#include "log.h"
int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
/* We don't want to fill the logs with messages about parse errors.
* Disable most logging if not running standalone */
if (!getenv("SYSTEMD_LOG_LEVEL"))
log_set_max_level(LOG_CRIT);
if (size > HID_MAX_DESCRIPTOR_SIZE)
return 0;
(void) is_fido_security_token_desc(data, size);
return 0;
}
+6
View File
@@ -0,0 +1,6 @@
"\xfe"
"\x00"
"\x01"
"\xf1"
"\xd0"
"\xf1\xd0\x00\x01"
+5
View File
@@ -146,4 +146,9 @@ fuzzers += [
[['src/fuzz/fuzz-time-util.c'],
[libshared],
[]],
[['src/fuzz/fuzz-fido-id-desc.c',
'src/udev/fido_id/fido_id_desc.c'],
[],
[]]
]