stack_protect_prologue in cfgexpand.c and stack_protect_epilogue in function.c in GNU Compiler Collection (GCC) 4.1 through 8 (under certain circumstances) generate instruction sequences when targeting ARM targets that spill the address of the stack protector guard, which allows an attacker to bypass the protection of -fstack-protector, -fstack-protector-all, -fstack-protector-strong, and -fstack-protector-explicit against stack overflow by controlling what the stack canary is compared against.
The product generates an error message that includes sensitive information about its environment, users, or associated data.
Name | Vendor | Start Version | End Version |
---|---|---|---|
Gcc | Gnu | 4.1 (including) | 8.0 (including) |
Gcc-4.8 | Ubuntu | bionic | * |
Gcc-4.8 | Ubuntu | cosmic | * |
Gcc-4.8 | Ubuntu | esm-apps/xenial | * |
Gcc-4.8 | Ubuntu | esm-infra-legacy/trusty | * |
Gcc-4.8 | Ubuntu | trusty | * |
Gcc-4.8 | Ubuntu | trusty/esm | * |
Gcc-4.8 | Ubuntu | xenial | * |
Gcc-4.9 | Ubuntu | esm-apps/xenial | * |
Gcc-4.9 | Ubuntu | trusty | * |
Gcc-4.9 | Ubuntu | xenial | * |
Gcc-6 | Ubuntu | bionic | * |
Gcc-6 | Ubuntu | cosmic | * |
Gcc-6 | Ubuntu | disco | * |
Gcc-6 | Ubuntu | esm-apps/bionic | * |
Gcc-6 | Ubuntu | trusty | * |
Gcc-7 | Ubuntu | bionic | * |
Gcc-7 | Ubuntu | cosmic | * |
Gcc-7 | Ubuntu | disco | * |
Gcc-7 | Ubuntu | eoan | * |
Gcc-7 | Ubuntu | esm-infra/bionic | * |
Gcc-7 | Ubuntu | focal | * |
Gcc-7 | Ubuntu | groovy | * |
Gcc-7 | Ubuntu | hirsute | * |
Gcc-8 | Ubuntu | bionic | * |
Gcc-8 | Ubuntu | cosmic | * |
Gcc-8 | Ubuntu | disco | * |
Gcc-8 | Ubuntu | eoan | * |
Gcc-8 | Ubuntu | groovy | * |
Gcc-8 | Ubuntu | hirsute | * |
Gcc-8 | Ubuntu | impish | * |
Gcc-9 | Ubuntu | upstream | * |
Gcc-arm-none-eabi | Ubuntu | bionic | * |
Gcc-arm-none-eabi | Ubuntu | cosmic | * |
Gcc-arm-none-eabi | Ubuntu | disco | * |
Gcc-arm-none-eabi | Ubuntu | eoan | * |
Gcc-arm-none-eabi | Ubuntu | groovy | * |
Gcc-arm-none-eabi | Ubuntu | hirsute | * |
Gcc-arm-none-eabi | Ubuntu | impish | * |
Gcc-arm-none-eabi | Ubuntu | kinetic | * |
Gcc-arm-none-eabi | Ubuntu | lunar | * |
Gcc-arm-none-eabi | Ubuntu | mantic | * |
Gcc-arm-none-eabi | Ubuntu | trusty | * |
Gcc-arm-none-eabi | Ubuntu | xenial | * |
Gcc-snapshot | Ubuntu | bionic | * |
Gcc-snapshot | Ubuntu | cosmic | * |
Gcc-snapshot | Ubuntu | disco | * |
Gcc-snapshot | Ubuntu | eoan | * |
Gcc-snapshot | Ubuntu | esm-apps/bionic | * |
Gcc-snapshot | Ubuntu | groovy | * |
Gcc-snapshot | Ubuntu | hirsute | * |
Gcc-snapshot | Ubuntu | impish | * |
Gcc-snapshot | Ubuntu | kinetic | * |
Gcc-snapshot | Ubuntu | lunar | * |
Gcc-snapshot | Ubuntu | mantic | * |
Gcc-snapshot | Ubuntu | trusty | * |
Gcc-snapshot | Ubuntu | xenial | * |
The sensitive information may be valuable information on its own (such as a password), or it may be useful for launching other, more serious attacks. The error message may be created in different ways:
An attacker may use the contents of error messages to help launch another, more focused attack. For example, an attempt to exploit a path traversal weakness (CWE-22) might yield the full pathname of the installed application. In turn, this could be used to select the proper number of “..” sequences to navigate to the targeted file. An attack using SQL injection (CWE-89) might not initially succeed, but an error message could reveal the malformed query, which would expose query logic and possibly even passwords or other sensitive information used within the query.