Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

RUSTSEC-2020-0071: Potential segfault in the time crate #1523

Closed
github-actions bot opened this issue Oct 18, 2021 · 5 comments
Closed

RUSTSEC-2020-0071: Potential segfault in the time crate #1523

github-actions bot opened this issue Oct 18, 2021 · 5 comments

Comments

@github-actions
Copy link

Potential segfault in the time crate

Details
Package time
Version 0.1.43
URL time-rs/time#293
Date 2020-11-18
Patched versions >=0.2.23
Unaffected versions =0.2.0,=0.2.1,=0.2.2,=0.2.3,=0.2.4,=0.2.5,=0.2.6

Impact

Unix-like operating systems may segfault due to dereferencing a dangling pointer in specific circumstances. This requires an environment variable to be set in a different thread than the affected functions. This may occur without the user's knowledge, notably in a third-party library.

The affected functions from time 0.2.7 through 0.2.22 are:

  • time::UtcOffset::local_offset_at
  • time::UtcOffset::try_local_offset_at
  • time::UtcOffset::current_local_offset
  • time::UtcOffset::try_current_local_offset
  • time::OffsetDateTime::now_local
  • time::OffsetDateTime::try_now_local

The affected functions in time 0.1 (all versions) are:

  • at
  • at_utc

Non-Unix targets (including Windows and wasm) are unaffected.

Patches

Pending a proper fix, the internal method that determines the local offset has been modified to always return None on the affected operating systems. This has the effect of returning an Err on the try_* methods and UTC on the non-try_* methods.

Users and library authors with time in their dependency tree should perform cargo update, which will pull in the updated, unaffected code.

Users of time 0.1 do not have a patch and should upgrade to an unaffected version: time 0.2.23 or greater or the 0.3. series.

Workarounds

No workarounds are known.

References

time-rs/time#293

See advisory page for additional details.

@syphar
Copy link
Member

syphar commented Oct 26, 2021

@jyn514 checking which crates use this old version, and there are more:

time v0.1.43
├── chrono v0.4.19
│   ├── chrono-tz v0.6.0
│   │   └── tera v1.13.0
│   │       └── docs-rs v0.6.0 (/Users/syphar/src/rust-lang/docs.rs)
│   ├── docs-rs v0.6.0 (/Users/syphar/src/rust-lang/docs.rs)
│   ├── postgres-types v0.2.2
│   │   ├── docs-rs v0.6.0 (/Users/syphar/src/rust-lang/docs.rs)
│   │   └── tokio-postgres v0.7.4
│   │       └── postgres v0.19.2
│   │           ├── docs-rs v0.6.0 (/Users/syphar/src/rust-lang/docs.rs)
│   │           ├── r2d2_postgres v0.18.1
│   │           │   └── docs-rs v0.6.0 (/Users/syphar/src/rust-lang/docs.rs)
│   │           └── schemamama_postgres v0.3.0
│   │               └── docs-rs v0.6.0 (/Users/syphar/src/rust-lang/docs.rs)
│   ├── rusoto_credential v0.46.0
│   │   ├── docs-rs v0.6.0 (/Users/syphar/src/rust-lang/docs.rs)
│   │   ├── rusoto_core v0.46.0
│   │   │   ├── docs-rs v0.6.0 (/Users/syphar/src/rust-lang/docs.rs)
│   │   │   └── rusoto_s3 v0.46.0
│   │   │       └── docs-rs v0.6.0 (/Users/syphar/src/rust-lang/docs.rs)
│   │   └── rusoto_signature v0.46.0
│   │       └── rusoto_core v0.46.0 (*)
│   ├── sentry-core v0.23.0
│   │   ├── sentry v0.23.0
│   │   │   └── docs-rs v0.6.0 (/Users/syphar/src/rust-lang/docs.rs)
│   │   ├── sentry-anyhow v0.23.0
│   │   │   └── docs-rs v0.6.0 (/Users/syphar/src/rust-lang/docs.rs)
│   │   ├── sentry-backtrace v0.23.0
│   │   │   ├── sentry v0.23.0 (*)
│   │   │   ├── sentry-anyhow v0.23.0 (*)
│   │   │   └── sentry-panic v0.23.0
│   │   │       ├── docs-rs v0.6.0 (/Users/syphar/src/rust-lang/docs.rs)
│   │   │       └── sentry v0.23.0 (*)
│   │   ├── sentry-contexts v0.23.0
│   │   │   └── sentry v0.23.0 (*)
│   │   ├── sentry-log v0.23.0
│   │   │   └── docs-rs v0.6.0 (/Users/syphar/src/rust-lang/docs.rs)
│   │   └── sentry-panic v0.23.0 (*)
│   ├── sentry-types v0.23.0
│   │   └── sentry-core v0.23.0 (*)
│   ├── systemstat v0.1.10
│   │   └── docs-rs v0.6.0 (/Users/syphar/src/rust-lang/docs.rs)
│   └── tera v1.13.0 (*)
├── docs-rs v0.6.0 (/Users/syphar/src/rust-lang/docs.rs)
├── hyper v0.10.16
│   └── iron v0.6.1
│       ├── docs-rs v0.6.0 (/Users/syphar/src/rust-lang/docs.rs)
│       └── router v0.6.0
│           └── docs-rs v0.6.0 (/Users/syphar/src/rust-lang/docs.rs)
└── zip v0.5.13
    └── docs-rs v0.6.0 (/Users/syphar/src/rust-lang/docs.rs)
[build-dependencies]
└── docs-rs v0.6.0 (/Users/syphar/src/rust-lang/docs.rs)

I'm not a security specialist, but it seems like a possible attacker exposing this would need access to our server, or the build pipeline, so I believe we're fine with ignoring this error.

@jyn514
Copy link
Member

jyn514 commented Oct 26, 2021

Yeah, as long as no one is using set_var we should be fine.

@jhpratt
Copy link
Member

jhpratt commented Nov 10, 2021

Yeah, as long as no one is using set_var we should be fine.

As the maintainer of the time crate I'm confirming this is correct. That said, it can't be called anywhere in the dependency tree. Every single dep would need to be checked on every single version bump to be 100% certain.

@jyn514
Copy link
Member

jyn514 commented Nov 10, 2021

@jhpratt realistically we don't have a choice here, switching away from iron is a multi-month project.

@jhpratt
Copy link
Member

jhpratt commented Nov 10, 2021

For sure. I'm just saying it's not easy because it transgresses crates.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants