Уязвимость в пакете process_lock версии 0.1.0 для Rust позволяет возникновению гонок данных при разблокировке. Проблема заключается в том, …
Уязвимость в пакете process_lock версии 0.1.0 для Rust позволяет возникновению гонок данных при разблокировке. Проблема заключается в том, что функция unlock не отмечена как unsafe, что может привести к гонкам данных при неожиданной разблокировке пользователем. Для подробной информации можно обратиться к документации lock-api [1]. Пример потенциального кода для воспроизведения проблемы: ```rust #[deny(unsafe_code)] use std::sync::Arc; use process_lock::*; use std::thread; use std::time::Duration; fn main() { let mut s1 = Arc::new(ProcessLock::new("test".parse().unwrap(), None).unwrap()); let mut s2 = s1.clone(); let h = std::thread::spawn(move || { if let Ok(mut guard) = s2.lock() { thread::sleep(Duration::from_secs(1)); // data race 1 } }); thread::sleep(Duration::from_secs(1)); if let Ok(_) = s1.unlock(){ if let Ok(guard2) = s1.lock(){ println!("data races"); // data race 2 } } h.join().unwrap(); } ``` Источники: - [1] https://github.com/tickbh/ProcessLock/issues/1 - [2] https://crates.io/crates/process_lock
Продукт содержит параллельную последовательность кода, требующую временного монопольного доступа к разделяемому ресурсу, однако существует временно́е окно, в течение которого этот ресурс может быть изменён другой параллельно выполняемой последовательностью кода.
https://cwe.mitre.org/data/definitions/362.html →Открыть в коллекции CWE →Злоумышленник нацеливается на состояние гонки, возникающее когда несколько процессов одновременно обращаются к одному ресурсу и манипулируют им, а результат выполнения зависит от конкретного порядка этих обращений. Злоумышленник может эксплуатировать состояние гонки, «участвуя в гонке»: изменяя ресурс и нарушая нормальный порядок выполнения. Например, состояние гонки может возникнуть при обращении к файлу: злоумышленник может обмануть систему, подменив исходный файл своей версией и заставив систему прочитать вредоносный файл.
https://capec.mitre.org/data/definitions/26.html →Открыть в коллекции CAPEC →Данная атака нацелена на состояние гонки, возникающее между моментом проверки (состояния) ресурса и моментом его использования. Типичный пример — обращение к файлу. Злоумышленник может эксплуатировать состояние гонки при обращении к файлу, «участвуя в гонке»: изменяя ресурс между первым обращением целевой программы к файлу и фактическим его использованием. В этом промежутке злоумышленник может заменить или изменить файл, вызвав неожиданное поведение приложения.
https://capec.mitre.org/data/definitions/29.html →Открыть в коллекции CAPEC →