Several memory safety issues have been uncovered in an audit of rusqlite.
See https://github.com/rusqlite/rusqlite/releases/tag/0.23.0 for a complete list.
rocket_contrib 0.4.11
This project might be open to known security vulnerabilities, which can be prevented by tightening the version range of affected dependencies. Find detailed information at the bottom.
rocket_contrib
(28 total, 19 outdated, 3 possibly insecure)
Crate | Required | Latest | Status |
---|---|---|---|
diesel ⚠️ | ^1.0 | 2.2.4 | out of date |
glob | ^0.3 | 0.3.1 | up to date |
handlebars | ^1.0 | 6.1.0 | out of date |
log | ^0.4 | 0.4.22 | up to date |
memcache | ^0.11 | 0.17.2 | out of date |
mongodb | ^0.3.12 | 3.1.0 | out of date |
mysql | ^14 | 25.0.1 | out of date |
notify | ^4.0.6 | 6.1.1 | out of date |
postgres | ^0.15 | 0.19.8 | out of date |
r2d2 | ^0.8 | 0.8.10 | up to date |
r2d2-memcache | ^0.3 | 0.6.0 | out of date |
r2d2-mongodb | ^0.2.0 | 0.2.2 | up to date |
r2d2_cypher | ^0.4 | 0.4.0 | up to date |
r2d2_mysql | ^9 | 25.0.0 | out of date |
r2d2_postgres | ^0.14 | 0.18.1 | out of date |
r2d2_redis | ^0.8 | 0.14.0 | out of date |
r2d2_sqlite | ^0.6 | 0.25.0 | out of date |
redis | ^0.9 | 0.26.1 | out of date |
rmp-serde | ^0.13 | 1.3.0 | out of date |
rocket | ^0.4.11 | 0.5.1 | out of date |
rocket_contrib_codegen | ^0.4.11 | 0.4.11 | up to date |
rusqlite ⚠️ | ^0.14.0 | 0.32.1 | out of date |
rusted_cypher | ^1 | 1.1.0 | up to date |
serde | ^1.0 | 1.0.210 | up to date |
serde_json | ^1.0.26 | 1.0.128 | up to date |
tera | ^0.11 | 1.20.0 | out of date |
time ⚠️ | ^0.1.40 | 0.3.36 | out of date |
uuid | ^0.7 | 1.10.0 | out of date |
rusqlite
: Various memory safety issuesSeveral memory safety issues have been uncovered in an audit of rusqlite.
See https://github.com/rusqlite/rusqlite/releases/tag/0.23.0 for a complete list.
time
: Potential segfault in the time crateThe affected functions set environment variables without synchronization. On Unix-like operating systems, this can crash in multithreaded programs. Programs may segfault due to dereferencing a dangling pointer if an environment variable is read in a different thread than the affected functions. This may occur without the user's knowledge, notably in the Rust standard library or third-party libraries.
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:
time::at_utc
time::at
time::now
time::tzset
Non-Unix targets (including Windows and wasm) are unaffected.
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.
A possible workaround for crates affected through the transitive dependency in chrono
, is to avoid using the default oldtime
feature dependency of the chrono
crate by disabling its default-features
and manually specifying the required features instead.
Cargo.toml
:
chrono = { version = "0.4", default-features = false, features = ["serde"] }
chrono = { version = "0.4.22", default-features = false, features = ["clock"] }
Commandline:
cargo add chrono --no-default-features -F clock
Sources:
diesel
: Binary Protocol Misinterpretation caused by Truncating or Overflowing CastsThe following presentation at this year's DEF CON was brought to our attention on the Diesel Gitter Channel:
SQL Injection isn't Dead: Smuggling Queries at the Protocol Level
http://web.archive.org/web/20240812130923/https://media.defcon.org/DEF%20CON%2032/DEF%20CON%2032%20presentations/DEF%20CON%2032%20-%20Paul%20Gerste%20-%20SQL%20Injection%20Isn't%20Dead%20Smuggling%20Queries%20at%20the%20Protocol%20Level.pdf
(Archive link for posterity.) Essentially, encoding a value larger than 4GiB can cause the length prefix in the protocol to overflow, causing the server to interpret the rest of the string as binary protocol commands or other data.
It appears Diesel does perform truncating casts in a way that could be problematic, for example: https://github.com/diesel-rs/diesel/blob/ae82c4a5a133db65612b7436356f549bfecda1c7/diesel/src/pg/connection/stmt/mod.rs#L36
This code has existed essentially since the beginning,
so it is reasonable to assume that all published versions <= 2.2.2
are affected.
The prefered migration to the outlined problem is to update to a Diesel version newer than 2.2.2, which includes fixes for the problem.
As always, you should make sure your application is validating untrustworthy user input. Reject any input over 4 GiB, or any input that could encode to a string longer than 4 GiB. Dynamically built queries are also potentially problematic if it pushes the message size over this 4 GiB bound.
For web application backends, consider adding some middleware that limits the size of request bodies by default.
Diesel now uses #[deny]
directives for the following Clippy lints:
to prevent casts that will lead to precision loss or other trunctations. Additionally we performed an audit of the relevant code.
A fix is included in the 2.2.3
release.