RUSTSEC-2021-0071

    Dashboard / Vulnerabilities / RUSTSEC-2021-0071

    RUSTSEC-2021-0071

    Published: 12 Jun 2021Last Modified: 8 Nov 2023

    Summary: `grep-cli` may run arbitrary executables on Windows

    Details: On Windows in versions of `grep-cli` prior to `0.1.6`, it's possible for some of the routines to execute arbitrary executables. In particular, a quirk of the Windows process execution API is that it will automatically consider the current directory before other directories when resolving relative binary names. Therefore, if you use `grep-cli` to read decompressed files in an untrusted directory with that directory as the CWD, a malicious actor to could put, e.g., a `gz.exe` binary in that directory and `grep-cli` will use the malicious actor's version of `gz.exe` instead of the system's. This is also technically possible on Unix as well, but only if the `PATH` variable contains `.`. Conventionally, they do not. A `DecompressionReader` has been fixed to automatically resolve binary names using `PATH`, instead of relying on the Windows API to do it. If you use `grep-cli`'s `CommandReader` with a `std::process::Command` value on Windows, then it is recommended to either construct the `Command` with an absolute binary name, or use `grep-cli`'s new [`resolve_binary`](https://docs.rs/grep-cli/0.1.6/grep_cli/fn.resolve_binary.html) helper function. To be clear, `grep-cli 0.1.6` mitigates this issue in two ways: * A `DecompressionReader` will resolve decompression programs to absolute paths automatically using the `PATH` environment variable, instead of relying on Windows APIs to do it (which would result in the undesirable behavior of checking the CWD for a program first). * A new function, `resolve_binary`, was added to help users of this crate mitigate this behavior when they need to create their own `std::process::Command`. For example, [ripgrep uses `grep_cli::resolve_binary`](https://github.com/BurntSushi/ripgrep/blob/7ce66f73cf7e76e9f2557922ac8e650eb02cf4ed/crates/core/search.rs#L119-L122) on the argument given to its `--pre` flag. While the first mitigation fixes this issue for sensible values of `PATH` when doing decompression search, the second mitigation is imperfect. The more fundamental issue is that `std::process::Command` is itself vulnerable to this.

    Affected packages

    Package

    Name: grep-cli

    Purl: pkg:cargo/grep-cli

    Affected ranges

    Type: SEMVER

    Events:

    Introduced- 0.0.0-0
    Fixed -0.1.6

    Affected versions

    Common Vulnerability Scoring System

    Attack Vector
    Network
    Adjacent
    Local
    Physical
    Privileges Required
    None
    Low
    High
    User Interaction
    None
    Required
    Scope
    Unchanged
    Changed
    Confidentiality
    None
    Low
    High
    Integrity
    None
    Low
    High
    Availability
    None
    Low
    High
    RUSTSEC-2021-0071 | CVE-DB