Skip to content

Commit d718146

Browse files
committed
Merge PR #1706: Add 2025-09 PM update
2 parents dad3816 + c9fcfd0 commit d718146

File tree

8 files changed

+483
-26
lines changed

8 files changed

+483
-26
lines changed
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
+++
2+
path = "2025/09/12/crates-io-phishing-campaign"
3+
title = "crates.io phishing campaign"
4+
authors = ["Rust Security Response WG", "crates.io team"]
5+
aliases = []
6+
+++
7+
8+
We received multiple reports of a phishing campaign targeting crates.io users
9+
(from the `rustfoundation.dev` domain name), mentioning a compromise of our
10+
infrastructure and asking users to authenticate to limit damage to their crates.
11+
12+
These emails are malicious and come from a domain name not controlled by the
13+
Rust Foundation (nor the Rust Project), seemingly with the purpose of stealing
14+
your GitHub credentials. We have no evidence of a compromise of the crates.io
15+
infrastructure.
16+
17+
We are taking steps to get the domain name taken down and to monitor for
18+
suspicious activity on crates.io. Do not follow any links in these emails if you
19+
receive them, and mark them as phishing with your email provider.
20+
21+
If you have any further questions please reach out to <[email protected]>
22+

content/Rust-1.90.0.md

Lines changed: 113 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,113 @@
1+
+++
2+
path = "2025/09/18/Rust-1.90.0"
3+
title = "Announcing Rust 1.90.0"
4+
authors = ["The Rust Release Team"]
5+
aliases = ["releases/1.90.0"]
6+
7+
[extra]
8+
release = true
9+
+++
10+
11+
The Rust team is happy to announce a new version of Rust, 1.90.0. Rust is a programming language empowering everyone to build reliable and efficient software.
12+
13+
If you have a previous version of Rust installed via `rustup`, you can get 1.90.0 with:
14+
15+
```console
16+
$ rustup update stable
17+
```
18+
19+
If you don't have it already, you can [get `rustup`](https://www.rust-lang.org/install.html) from the appropriate page on our website, and check out the [detailed release notes for 1.90.0](https://doc.rust-lang.org/stable/releases.html#version-1900-2025-09-18).
20+
21+
If you'd like to help us out by testing future releases, you might consider updating locally to use the beta channel (`rustup default beta`) or the nightly channel (`rustup default nightly`). Please [report](https://github.com/rust-lang/rust/issues/new/choose) any bugs you might come across!
22+
23+
## What's in 1.90.0 stable
24+
25+
# LLD is now the default linker on `x86_64-unknown-linux-gnu`
26+
27+
The `x86_64-unknown-linux-gnu` target will now use the LLD linker for linking Rust crates by default. This should result in improved linking performance vs the default Linux linker (BFD), particularly for large binaries, binaries with a lot of debug information, and for incremental rebuilds.
28+
29+
In the vast majority of cases, LLD should be backwards compatible with BFD, and you should not see any difference other than reduced compilation time. However, if you do run into any new linker issues, you can always opt out using the `-C linker-features=-lld` compiler flag. Either by adding it to the usual `RUSTFLAGS` environment variable, or to a project's [`.cargo/config.toml`](https://doc.rust-lang.org/cargo/reference/config.html) configuration file,
30+
like so:
31+
32+
```toml
33+
[target.x86_64-unknown-linux-gnu]
34+
rustflags = ["-Clinker-features=-lld"]
35+
```
36+
37+
If you encounter any issues with the LLD linker, please [let us know](https://github.com/rust-lang/rust/issues/new/choose). You can read more about the switch to LLD, some benchmark numbers and the opt out mechanism [here](https://blog.rust-lang.org/2025/09/01/rust-lld-on-1.90.0-stable/).
38+
39+
### Cargo adds native support for workspace publishing
40+
41+
`cargo publish --workspace` is now supported, automatically publishing all of
42+
the crates in a workspace in the right order (following any dependencies
43+
between them).
44+
45+
This has long been possible with external tooling or manual ordering of
46+
individual publishes, but this brings the functionality into Cargo itself.
47+
48+
Native integration allows Cargo's publish verification to run a build across
49+
the full set of to-be-published crates *as if* they were published, including
50+
during dry-runs. Note that publishes are still not atomic -- network errors or
51+
server-side failures can still lead to a partially published workspace.
52+
53+
### Demoting `x86_64-apple-darwin` to Tier 2 with host tools
54+
55+
GitHub will soon [discontinue][gha-sunset] providing free macOS x86\_64 runners for public repositories. Apple has also announced their [plans][apple] for discontinuing support for the x86\_64 architecture.
56+
57+
In accordance with these changes, as of Rust 1.90, we have [demoted the `x86_64-apple-darwin` target][rfc] from [Tier 1 with host tools](https://doc.rust-lang.org/stable/rustc/platform-support.html#tier-1-with-host-tools) to [Tier 2 with host tools](https://doc.rust-lang.org/stable/rustc/platform-support.html#tier-2-with-host-tools). This means that the target, including tools like `rustc` and `cargo`, will be guaranteed to build but is not guaranteed to pass our automated test suite.
58+
59+
For users, this change will not immediately cause impact. Builds of both the standard library and the compiler will still be distributed by the Rust Project for use via `rustup` or alternative installation methods while the target remains at Tier 2. Over time, it's likely that reduced test coverage for this target will cause things to break or fall out of compatibility with no further announcements.
60+
61+
[apple]: https://en.wikipedia.org/wiki/Mac_transition_to_Apple_silicon#Timeline
62+
[gha-sunset]: https://github.blog/changelog/2025-07-11-upcoming-changes-to-macos-hosted-runners-macos-latest-migration-and-xcode-support-policy-updates/#macos-13-is-closing-down
63+
[rfc]: https://github.com/rust-lang/rfcs/pull/3841
64+
65+
### Stabilized APIs
66+
67+
- [`u{n}::checked_sub_signed`](https://doc.rust-lang.org/stable/std/primitive.usize.html#method.checked_sub_signed)
68+
- [`u{n}::overflowing_sub_signed`](https://doc.rust-lang.org/stable/std/primitive.usize.html#method.overflowing_sub_signed)
69+
- [`u{n}::saturating_sub_signed`](https://doc.rust-lang.org/stable/std/primitive.usize.html#method.saturating_sub_signed)
70+
- [`u{n}::wrapping_sub_signed`](https://doc.rust-lang.org/stable/std/primitive.usize.html#method.wrapping_sub_signed)
71+
- [`impl Copy for IntErrorKind`](https://doc.rust-lang.org/stable/std/num/enum.IntErrorKind.html#impl-Copy-for-IntErrorKind)
72+
- [`impl Hash for IntErrorKind`](https://doc.rust-lang.org/stable/std/num/enum.IntErrorKind.html#impl-Hash-for-IntErrorKind)
73+
- [`impl PartialEq<&CStr> for CStr`](https://doc.rust-lang.org/stable/std/ffi/struct.CStr.html#impl-PartialEq%3C%26CStr%3E-for-CStr)
74+
- [`impl PartialEq<CString> for CStr`](https://doc.rust-lang.org/stable/std/ffi/struct.CStr.html#impl-PartialEq%3CCString%3E-for-CStr)
75+
- [`impl PartialEq<Cow<CStr>> for CStr`](https://doc.rust-lang.org/stable/std/ffi/struct.CStr.html#impl-PartialEq%3CCow%3C'_,+CStr%3E%3E-for-CStr)
76+
- [`impl PartialEq<&CStr> for CString`](https://doc.rust-lang.org/stable/std/ffi/struct.CString.html#impl-PartialEq%3C%26CStr%3E-for-CString)
77+
- [`impl PartialEq<CStr> for CString`](https://doc.rust-lang.org/stable/std/ffi/struct.CString.html#impl-PartialEq%3CCStr%3E-for-CString)
78+
- [`impl PartialEq<Cow<CStr>> for CString`](https://doc.rust-lang.org/stable/std/ffi/struct.CString.html#impl-PartialEq%3CCow%3C'_,+CStr%3E%3E-for-CString)
79+
- [`impl PartialEq<&CStr> for Cow<CStr>`](https://doc.rust-lang.org/stable/std/borrow/enum.Cow.html#impl-PartialEq%3C%26CStr%3E-for-Cow%3C'_,+CStr%3E)
80+
- [`impl PartialEq<CStr> for Cow<CStr>`](https://doc.rust-lang.org/stable/std/borrow/enum.Cow.html#impl-PartialEq%3CCStr%3E-for-Cow%3C'_,+CStr%3E)
81+
- [`impl PartialEq<CString> for Cow<CStr>`](https://doc.rust-lang.org/stable/std/borrow/enum.Cow.html#impl-PartialEq%3CCString%3E-for-Cow%3C'_,+CStr%3E)
82+
83+
These previously stable APIs are now stable in const contexts:
84+
85+
- [`<[T]>::reverse`](https://doc.rust-lang.org/stable/std/primitive.slice.html#method.reverse)
86+
- [`f32::floor`](https://doc.rust-lang.org/stable/std/primitive.f32.html#method.floor)
87+
- [`f32::ceil`](https://doc.rust-lang.org/stable/std/primitive.f32.html#method.ceil)
88+
- [`f32::trunc`](https://doc.rust-lang.org/stable/std/primitive.f32.html#method.trunc)
89+
- [`f32::fract`](https://doc.rust-lang.org/stable/std/primitive.f32.html#method.fract)
90+
- [`f32::round`](https://doc.rust-lang.org/stable/std/primitive.f32.html#method.round)
91+
- [`f32::round_ties_even`](https://doc.rust-lang.org/stable/std/primitive.f32.html#method.round_ties_even)
92+
- [`f64::floor`](https://doc.rust-lang.org/stable/std/primitive.f64.html#method.floor)
93+
- [`f64::ceil`](https://doc.rust-lang.org/stable/std/primitive.f64.html#method.ceil)
94+
- [`f64::trunc`](https://doc.rust-lang.org/stable/std/primitive.f64.html#method.trunc)
95+
- [`f64::fract`](https://doc.rust-lang.org/stable/std/primitive.f64.html#method.fract)
96+
- [`f64::round`](https://doc.rust-lang.org/stable/std/primitive.f64.html#method.round)
97+
- [`f64::round_ties_even`](https://doc.rust-lang.org/stable/std/primitive.f64.html#method.round_ties_even)
98+
99+
### Platform Support
100+
101+
- `x86_64-apple-darwin` is now a tier 2 target
102+
103+
Refer to Rust’s [platform support page][platform_support_page] for more information on Rust’s tiered platform support.
104+
105+
### Other changes
106+
107+
Check out everything that changed in [Rust](https://github.com/rust-lang/rust/releases/tag/1.90.0), [Cargo](https://doc.rust-lang.org/nightly/cargo/CHANGELOG.html#cargo-190-2025-09-18), and [Clippy](https://github.com/rust-lang/rust-clippy/blob/master/CHANGELOG.md#rust-190).
108+
109+
## Contributors to 1.90.0
110+
111+
Many people came together to create Rust 1.90.0. We couldn't have done it without all of you. [Thanks!](https://thanks.rust-lang.org/rust/1.90.0/)
112+
113+
[platform_support_page]: https://doc.rust-lang.org/rustc/platform-support.html
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
+++
2+
path = "2025/09/24/crates.io-malicious-crates-fasterlog-and-asyncprintln"
3+
title = "crates.io: Malicious crates faster_log and async_println"
4+
authors = ["Walter Pearce"]
5+
6+
[extra]
7+
team = "the crates.io team"
8+
team_url = "https://www.rust-lang.org/governance/teams/dev-tools#team-crates-io"
9+
+++
10+
11+
**Updated September 24th, 2025 17:34:38 UTC** - Socket has also published their own [accompanying blog post][socket-blog] about the attack.
12+
13+
## Summary
14+
15+
On September 24th, the crates.io team was notified by Kirill Boychenko from the [Socket Threat Research Team][socket] of two malicious crates which were actively searching file contents for Etherum private keys, Solana private keys, and arbitrary byte arrays for exfiltration.
16+
17+
These crates were:
18+
- `faster_log` - Published on May 25th, 2025, downloaded 7181 times
19+
- `async_println` - Published on May 25th, 2025, downloaded 1243 times
20+
21+
The malicious code was executed at runtime, when running or testing a project depending on them. Notably, they did not execute any malicious code at build time. Except for their malicious payload, these crates copied the source code, features, and documentation of legitimate crates, using a similiar name to them (a case of typosquatting[^typosquatting]).
22+
23+
## Actions taken
24+
25+
The users in question were immediately disabled, and the crates in question were deleted[^deletion] from crates.io shortly after. We have retained copies of all logs associated with the users and the malicious crate files for further analysis.
26+
27+
The deletion was performed at 15:34 UTC on September 24, 2025.
28+
29+
## Analysis
30+
31+
Both crates were copies of a crate which provided logging functionality, and the logging implementation remained functional in the malicious crates. The original crate had a feature which performed log file packing, which iterated over an associated directories files.
32+
33+
The attacker inserted code to perform the malicious action during a log packing operation, which searched the log files being processed from that directory for:
34+
35+
- Quoted Ethereum private keys (0x + 64 hex)
36+
- Solana-style Base58 secrets
37+
- Bracketed byte arrays
38+
39+
The crates then proceeded to exfiltrate the results of this search to `https://mainnet[.]solana-rpc-pool[.]workers[.]dev/`.
40+
41+
These crates had no dependent downstream crates on crates.io.
42+
43+
The malicious users associated with these crates had no other crates or publishes, and the team is actively investigating associative actions in our retained[^retention] logs.
44+
45+
## Thanks
46+
47+
Our thanks to Kirill Boychenko from the [Socket Threat Research Team][socket] for reporting the crates. We also want to thank Carol Nichols from the crates.io team, Pietro Albini from the Rust Security Response WG and Walter Pearce from the [Rust Foundation][foundation] for aiding in the response.
48+
49+
[^deletion]: The crates were preserved for future analysis should there be other attacks, and to inform scanning efforts in the future.
50+
[^retention]: One year of logs are retained on crates.io, but only 30 days are immediately available on our log platform. We chose not to go further back in our analysis, since IP address based analysis is limited by the use of dynamic IP addresses in the wild, and the relevant IP address being part of an allocation to a residential ISP.
51+
[^typosquatting]: typosquatting is a technique used by bad actors to initiate dependency confusion attacks where a legitimate user might be tricked into using a malicious dependency instead of their intended dependency — for example, a bad actor might try to publish a crate at `proc-macro3` to catch users of the legitimate `proc-macro2` crate.
52+
53+
[foundation]: https://foundation.rust-lang.org/
54+
[init]: https://foundation.rust-lang.org/news/2022-09-13-rust-foundation-establishes-security-team/
55+
[socket]: https://www.socket.dev/
56+
[socket-blog]: https://socket.dev/blog/two-malicious-rust-crates-impersonate-popular-logger-to-steal-wallet-keys
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
+++
2+
path = "inside-rust/2025/09/23/leadership-council-repr-selection"
3+
title = "Leadership Council September 2025 Representative Selections"
4+
authors = ["Eric Huss"]
5+
6+
[extra]
7+
team = "Leadership Council"
8+
team_url = "https://www.rust-lang.org/governance/teams/leadership-council"
9+
+++
10+
11+
The September 2025 selections for [Leadership Council] representatives have been finalized. The [infrastructure team][infra] has chosen [Jakub Beránek] as their new representative. [TC], [Mara Bos], and [Oli Scherer] will continue to represent [lang], [libs], and [mods] respectively.
12+
13+
We'd like to give our thanks to outgoing representative [Mark Rousskov] for being instrumental to the formation of the Council and representing the infrastructure team these past two years. We've greatly appreciated Mark's support!
14+
15+
Thanks to everyone who participated in the process! The next representative selections will be in March 2026 for the other half of the Council.
16+
17+
[Leadership Council]: https://www.rust-lang.org/governance/teams/leadership-council
18+
19+
[Infra]: https://www.rust-lang.org/governance/teams/infra
20+
[Lang]: https://www.rust-lang.org/governance/teams/lang
21+
[Libs]: https://www.rust-lang.org/governance/teams/library
22+
[Mods]: https://www.rust-lang.org/governance/teams/moderation
23+
24+
[Jakub Beránek]: https://github.com/Kobzol/
25+
[Mara Bos]: https://github.com/m-ou-se
26+
[TC]: https://github.com/traviscross/
27+
[Oli Scherer]: https://github.com/oli-obk
28+
[Mark Rousskov]: https://github.com/Mark-Simulacrum

0 commit comments

Comments
 (0)