Π£ΡΠ·Π²ΠΈΠΌΠΎΡΡ‚ΡŒ Π² Rust-Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°Ρ… для Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° TAR, приводящая ΠΊ распаковкС Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΈΠ· Π²Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠ³ΠΎ Π°Ρ€Ρ…ΠΈΠ²Π°

Π’ написанной Π½Π° языкС Rust Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅ async-tar, ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰Π΅ΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ для чтСния ΠΈ записи tar-Π°Ρ€Ρ…ΠΈΠ²ΠΎΠ², выявлСна ΡƒΡΠ·Π²ΠΈΠΌΠΎΡΡ‚ΡŒ (CVE-2025-62518, ΠΊΠΎΠ΄ΠΎΠ²ΠΎΠ΅ имя TARmageddon), ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰Π°Ρ ΠΏΡ€ΠΈ распаковкС ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ ΠΎΡ„ΠΎΡ€ΠΌΠ»Π΅Π½Π½ΠΎΠ³ΠΎ tar-Π°Ρ€Ρ…ΠΈΠ²Π° Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΈΠ·Π²Π»Π΅Ρ‡ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ‰Ρ‘Π½Π½Ρ‹Π΅ Π² Π½Ρ‘ΠΌ Ρ„Π°ΠΉΠ»Ρ‹, Π½ΠΎ ΠΈ Ρ„Π°ΠΉΠ»Ρ‹, содСрТащиСся Π²ΠΎ Π²Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠΌ tar-Π°Ρ€Ρ…ΠΈΠ²Π΅. Π£ΡΠ·Π²ΠΈΠΌΠΎΡΡ‚ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ использована для ΠΎΠ±Ρ…ΠΎΠ΄Π° систСм Π²Π΅Ρ€ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ Π°Ρ€Ρ…ΠΈΠ²ΠΎΠ² ΠΈ распаковки Ρ„Π°ΠΉΠ»ΠΎΠ², для ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π½Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΠ»Π°ΡΡŒ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ°.

Π£ΡΠ·Π²ΠΈΠΌΠΎΡΡ‚ΡŒ Ρ‚Π°ΠΊΠΆΠ΅ проявляСтся Π² Ρ„ΠΎΡ€ΠΊΠ°Ρ… Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ async-tar, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ tokio-tar, krata-tokio-tar ΠΈ astral-tokio-tar, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π² ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Π°Ρ… Π½Π° ΠΈΡ… основС, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π² ΠΏΠ°ΠΊΠ΅Ρ‚Π½ΠΎΠΌ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€Π΅ uv, Ρ€Π°Π·Π²ΠΈΠ²Π°Π΅ΠΌΠΎΠΌ Π² качСствС Π²Ρ‹ΡΠΎΠΊΠΎΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ Π·Π°ΠΌΠ΅Π½Ρ‹ Β«pipΒ» для ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ² Π½Π° языкС Python. Из популярных ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ², ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΡ… уязвимыС Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ, Ρ‚Π°ΠΊΠΆΠ΅ ΠΎΡ‚ΠΌΠ΅Ρ‡Π°ΡŽΡ‚ΡΡ инструмСнтарий testcontainers для запуска docker-ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ² ΠΈ WebAssembly runtime wasmCloud. Π’ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ crates.is Π·Π° послСдниС 90 Π΄Π½Π΅ΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° async-tar насчитываСт 1.3 ΠΌΠ»Π½ Π·Π°Π³Ρ€ΡƒΠ·ΠΎΠΊ, tokio-tar β€” 2.2 ΠΌΠ»Π½, testcontainers β€” 2.9 ΠΌΠ»Π½.

Π£ΡΠ·Π²ΠΈΠΌΠΎΡΡ‚ΡŒ Π²Ρ‹Π·Π²Π°Π½Π° Π½Π΅ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Ρ‹ΠΌ Π²Ρ‹Π±ΠΎΡ€ΠΎΠΌ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ ΠΏΡ€ΠΈ Ρ€Π°Π·Π±ΠΎΡ€Π΅ Ρ€Π°Π·Π½Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° Π² Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ°Ρ… ustar ΠΈ PAX. Π’ tar-Π°Ρ€Ρ…ΠΈΠ²Π°Ρ… Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ PAX для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° Π²Π½ΡƒΡ‚Ρ€ΠΈ Π°Ρ€Ρ…ΠΈΠ²Π° ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ Π΄Π²Π° Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° β€” классичСский ustar ΠΈ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Π½Ρ‹ΠΉ PAX. ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π²Ρ‹Π·Π²Π°Π½Π° Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ уязвимыС Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΏΡ€ΠΈ распаковкС Ρ„Π°ΠΉΠ»ΠΎΠ² вмСсто вычислСния смСщСния Π½Π° основС Ρ€Π°Π·ΠΌΠ΅Ρ€Π° ΠΈΠ· Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Π½ΠΎΠ³ΠΎ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° PAX, Π±Ρ€Π°Π»ΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΈΠ· ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠ΅Π³ΠΎ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° ustar. ΠŸΡ€ΠΈ Π½ΡƒΠ»Π΅Π²ΠΎΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° Π² Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ΅ ustar, ΠΈΠ΄ΡƒΡ‰Π΅Π΅ Π·Π° Π½ΠΈΠΌ содСрТимоС Ρ„Π°ΠΉΠ»Π° ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π»ΠΎΡΡŒ ΠΊΠ°ΠΊ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Ρ‹ΠΉ Π±Π»ΠΎΠΊ TAR-Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠ² для ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ Ρ„Π°ΠΉΠ»Π°.

 Π£ΡΠ·Π²ΠΈΠΌΠΎΡΡ‚ΡŒ Π² Rust-Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°Ρ… для Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° TAR, приводящая ΠΊ распаковкС Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΈΠ· Π²Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠ³ΠΎ Π°Ρ€Ρ…ΠΈΠ²Π°
 Π£ΡΠ·Π²ΠΈΠΌΠΎΡΡ‚ΡŒ Π² Rust-Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°Ρ… для Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° TAR, приводящая ΠΊ распаковкС Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΈΠ· Π²Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠ³ΠΎ Π°Ρ€Ρ…ΠΈΠ²Π°

Для ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ Π°Ρ‚Π°ΠΊΠΈ достаточно ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ TAR-Π°Ρ€Ρ…ΠΈΠ², Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π² ustar-Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ΅ ΡƒΠΊΠ°Π·Π°Π½ Π½ΡƒΠ»Π΅Π²ΠΎΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€, Π° Π² Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ΅ для Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° PAX Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€, ΠΈΠ·-Π·Π° Ρ‡Π΅Π³ΠΎ содСрТимоС Ρ„Π°ΠΉΠ»Π° с Π΄Ρ€ΡƒΠ³ΠΈΠΌ tar-Π°Ρ€Ρ…ΠΈΠ²ΠΎΠΌ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½ΠΎ ΠΊΠ°ΠΊ Ρ‡Π°ΡΡ‚ΡŒ основного Π°Ρ€Ρ…ΠΈΠ²Π°. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΊΠΎΠ΄Π° для создания ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Ρ… Π°Ρ€Ρ…ΠΈΠ²ΠΎΠ² Ρ€Π°Π·ΠΌΠ΅Ρ‰Ρ‘Π½ Π½Π° GitHub. Π£ΡΠ·Π²ΠΈΠΌΠΎΡΡ‚ΡŒ устранСна Π² выпусках tokio-tar 0.5.6 ΠΈ uv 0.9.5. Для ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Ρ… Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ исправлСния ΠΏΠΎΠΊΠ° Π½Π΅ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½Ρ‹, Π½ΠΎ для astral-tokio-tar, async-tar ΠΈ krata-tokio-tar ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²Π»Π΅Π½Ρ‹ ΠΏΠ°Ρ‚Ρ‡ΠΈ.

Уязвимости Π² Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°Ρ… присвоСн ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ опасности 8.1 ΠΈΠ· 10, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ для пСрСзаписи распаковываСмых Ρ„Π°ΠΉΠ»ΠΎΠ² (Π² уязвимых рСализациях Π±ΡƒΠ΄ΡƒΡ‚ распакованы Π½Π΅ Ρ‚Π΅ Ρ„Π°ΠΉΠ»Ρ‹, Ρ‡Ρ‚ΠΎ Π±Ρ‹Π»ΠΈ Π²ΠΈΠ΄Π½Ρ‹ Π² Π°Ρ€Ρ…ΠΈΠ²Π΅). ΠŸΡ€ΠΈ этом ΡƒΡΠ·Π²ΠΈΠΌΠΎΡΡ‚ΡŒ Π² ΠΏΠ°ΠΊΠ΅Ρ‚Π½ΠΎΠΌ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€Π΅ uv ΠΎΡ‚ΠΌΠ΅Ρ‡Π΅Π½Π° ΠΊΠ°ΠΊ нСопасная, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Ссли Π°Ρ‚Π°ΠΊΡƒΡŽΡ‰ΠΈΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Π»ΠΈΡΡ‚ΡŒ Π½Π° содСрТимоС исходного Π°Ρ€Ρ…ΠΈΠ²Π°, Π½Π΅Ρ‚ смысла ΡƒΡΠ»ΠΎΠΆΠ½ΡΡ‚ΡŒ Π°Ρ‚Π°ΠΊΡƒ ΠΈ ΡΠΊΡΠΏΠ»ΡƒΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΡƒΡΠ·Π²ΠΈΠΌΠΎΡΡ‚ΡŒ Ρ‡Π΅Ρ€Π΅Π· Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΉ Π°Ρ€Ρ…ΠΈΠ², ΠΊΠΎΠ³Π΄Π° ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ выполнСния ΠΊΠΎΠ΄Π° Ρ‡Π΅Ρ€Π΅Π· сборочныС сцСнарии Π² основном Π°Ρ€Ρ…ΠΈΠ²Π΅.

Π’Ρ‹ΡΠ²ΠΈΠ²ΡˆΠΈΠ΅ ΡƒΡΠ·Π²ΠΈΠΌΠΎΡΡ‚ΡŒ исслСдоватСли ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠΈΠ»ΠΈ нСсколько гипотСтичСских сцСнариСв Π°Ρ‚Π°ΠΊ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΡ… ΠΎΠ±ΠΎΠΉΡ‚ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ бСзопасности ΠΈ Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ выполнСния ΠΊΠΎΠ΄Π° Ρ‡Π΅Ρ€Π΅Π· Π·Π°ΠΌΠ΅Π½Ρƒ Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ ΠΈΠ»ΠΈ Π²ΠΌΠ΅ΡˆΠ°Ρ‚Π΅Π»ΡŒΡΡ‚Π²ΠΎ Π² сборочный процСсс. ΠŸΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°Π΅Ρ‚ΡΡ, Ρ‡Ρ‚ΠΎ присланный Π°Ρ€Ρ…ΠΈΠ² смоТСт ΠΏΡ€ΠΎΠΉΡ‚ΠΈ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΡƒΡŽ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ сканСром бСзопасности ΠΈ Ρ€ΡƒΡ‡Π½ΠΎΠΉ Π°ΡƒΠ΄ΠΈΡ‚, Π² Ρ…ΠΎΠ΄Π΅ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡŽΡ‰ΠΈΠΉ Π½Π΅ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° странный Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΉ Π°Ρ€Ρ…ΠΈΠ² с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ, послС Ρ‡Π΅Π³ΠΎ ΠΏΡ€ΠΈ распаковкС ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ Rust-Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ ΠΈΠ· Π°Ρ€Ρ…ΠΈΠ²Π° Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠ·Π²Π»Π΅Ρ‡Π΅Π½ΠΎ ΠΈΠ½ΠΎΠ΅ содСрТимоС, Ρ‡Π΅ΠΌ оТидалось.

НапримСр, Π°Ρ‚Π°ΠΊΡƒΡŽΡ‰ΠΈΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Π°Ρ€Ρ…ΠΈΠ² Π² Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ PyPI, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΡ€ΠΎΠΉΠ΄Ρ‘Ρ‚ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ Π½Π° основС Π°Π½Π°Π»ΠΈΠ·Π° содСрТимого основного Π°Ρ€Ρ…ΠΈΠ²Π°, содСрТащСго Π»Π΅Π³ΠΈΡ‚ΠΈΠΌΠ½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» pyproject.toml. ΠŸΡ€ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΠ°ΠΊΠ΅Ρ‚Π° ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρ‹ uv Π»Π΅Π³ΠΈΡ‚ΠΈΠΌΠ½Ρ‹ΠΉ pyproject.toml Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°ΠΌΠ΅Π½Ρ‘Π½ Π½Π° врСдоносный Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ ΠΈΠ· Π²Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠ³ΠΎ Π°Ρ€Ρ…ΠΈΠ²Π°, содСрТащий ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±ΡƒΠ΄ΡƒΡ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Ρ‹ ΠΏΡ€ΠΈ сборкС Π½Π° ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° ΠΈΠ»ΠΈ Π² систСмС Π½Π΅ΠΏΡ€Π΅Ρ€Ρ‹Π²Π½ΠΎΠΉ ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ. Аналогично, ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π·Π°ΠΏΠΈΡΡŒ Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° ΠΏΡ€ΠΈ ΠΈΠ·Π²Π»Π΅Ρ‡Π΅Π½ΠΈΠΈ ΠΎΠ±Ρ€Π°Π·Π° ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ инструмСнтария testcontainers.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: opennet.ru

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ