crossystem: Reject invalid characters in string properties
Firmware property strings (e.g. fwid, ro_fwid, hwid) read from FDT or
ACPI can contain arbitrary characters if an attacker modified the
underlying flash sections (e.g. RW_FWID). On ARM, ReadFdtBlock reads
the full node without checking for newlines or non-printable
characters. Embedded newlines in crossystem stdout can forge separate
key-value lines when scraped by tools such as StatisticsProvider.
Introduce is_valid_property_string() in host_misc to ensure property
strings only contain printable ASCII characters (0x20..0x7E) and do not
contain '=', '\\', '\'', or '"'. Return error when invalid characters
are detected in ReadFdtString, ReadAcpiSysfsString, or hwid-override.
BUG=b:557502272
TEST=make rununittests
BRANCH=none
TAG=agy
CONV=ad09cbc3-349f-43e7-abdd-ab8c2ee7b9ca
Change-Id: I96536cd78c06ecc93c632b4f8a8504146a6a6964
Signed-off-by: Yu-Ping Wu <yupingso@google.com>
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/vboot_reference/+/8412966
Reviewed-by: Julius Werner <jwerner@chromium.org>
Auto-Submit: Yu-Ping Wu <yupingso@chromium.org>
Commit-Queue: Julius Werner <jwerner@chromium.org>
Tested-by: Yu-Ping Wu <yupingso@chromium.org>
6 files changed