Skip to content

Commit e309c9b

Browse files
committed
fix(security): CVE-2024-43414: Update query planner to resolve uncontrolled recursion
Update the version of `@apollo/query-planner` used by Router to correct an uncontrolled recursion weakness (classified as [CWE-674]) during query planning for complex queries on particularly complex graphs. This weakness impacts all versions of Router. See the associated Github Advisory, [GHSA-fmj9-77q8-g6c4], for more information. [CWE-674]: https://cwe.mitre.org/data/definitions/674.html [GHSA-fmj9-77q8-g6c4]: GHSA-fmj9-77q8-g6c4
1 parent 7a9c020 commit e309c9b

File tree

4 files changed

+11
-11
lines changed

4 files changed

+11
-11
lines changed

Cargo.lock

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6096,9 +6096,9 @@ dependencies = [
60966096

60976097
[[package]]
60986098
name = "router-bridge"
6099-
version = "0.5.27+v2.8.1"
6099+
version = "0.5.31+v2.8.5"
61006100
source = "registry+https://github.com/rust-lang/crates.io-index"
6101-
checksum = "288fa40fc4e0a76fb911410e05d4525e8bf7558622bd02403f89f871c4d0785b"
6101+
checksum = "672901b1ec6fd110ac41d61ca5e1754319d0edf39546a089a114ab865d42ae97"
61026102
dependencies = [
61036103
"anyhow",
61046104
"async-channel 1.9.0",

apollo-router/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -197,7 +197,7 @@ regex = "1.10.5"
197197
reqwest.workspace = true
198198

199199
# note: this dependency should _always_ be pinned, prefix the version with an `=`
200-
router-bridge = "=0.5.27+v2.8.1"
200+
router-bridge = "=0.5.31+v2.8.5"
201201

202202
rust-embed = { version = "8.4.0", features = ["include-exclude"] }
203203
rustls = "0.21.12"

apollo-router/tests/integration/redis.rs

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ async fn query_planner_cache() -> Result<(), BoxError> {
2626
// 2. run `docker compose up -d` and connect to the redis container by running `docker-compose exec redis /bin/bash`.
2727
// 3. Run the `redis-cli` command from the shell and start the redis `monitor` command.
2828
// 4. Run this test and yank the updated cache key from the redis logs.
29-
let known_cache_key = "plan:0:v2.8.1:16385ebef77959fcdc520ad507eb1f7f7df28f1d54a0569e3adabcb4cd00d7ce:3973e022e93220f9212c18d0d0c543ae7c309e46640da93a4a0314de999f5112:3106dfc3339d8c3f3020434024bff0f566a8be5995199954db5a7525a7d7e67a";
29+
let known_cache_key = "plan:0:v2.8.5:16385ebef77959fcdc520ad507eb1f7f7df28f1d54a0569e3adabcb4cd00d7ce:3973e022e93220f9212c18d0d0c543ae7c309e46640da93a4a0314de999f5112:3106dfc3339d8c3f3020434024bff0f566a8be5995199954db5a7525a7d7e67a";
3030

3131
let config = RedisConfig::from_url("redis://127.0.0.1:6379").unwrap();
3232
let client = RedisClient::new(config, None, None, None);
@@ -909,7 +909,7 @@ async fn connection_failure_blocks_startup() {
909909
async fn query_planner_redis_update_query_fragments() {
910910
test_redis_query_plan_config_update(
911911
include_str!("fixtures/query_planner_redis_config_update_query_fragments.router.yaml"),
912-
"plan:0:v2.8.1:a9e605fa09adc5a4b824e690b4de6f160d47d84ede5956b58a7d300cca1f7204:3973e022e93220f9212c18d0d0c543ae7c309e46640da93a4a0314de999f5112:9054d19854e1d9e282ac7645c612bc70b8a7143d43b73d44dade4a5ec43938b4",
912+
"plan:0:v2.8.5:a9e605fa09adc5a4b824e690b4de6f160d47d84ede5956b58a7d300cca1f7204:3973e022e93220f9212c18d0d0c543ae7c309e46640da93a4a0314de999f5112:9054d19854e1d9e282ac7645c612bc70b8a7143d43b73d44dade4a5ec43938b4",
913913
)
914914
.await;
915915
}
@@ -928,7 +928,7 @@ async fn query_planner_redis_update_planner_mode() {
928928
async fn query_planner_redis_update_introspection() {
929929
test_redis_query_plan_config_update(
930930
include_str!("fixtures/query_planner_redis_config_update_introspection.router.yaml"),
931-
"plan:0:v2.8.1:a9e605fa09adc5a4b824e690b4de6f160d47d84ede5956b58a7d300cca1f7204:3973e022e93220f9212c18d0d0c543ae7c309e46640da93a4a0314de999f5112:04b3051125b5994fba6b0a22b2d8b4246cadc145be030c491a3431655d2ba07a",
931+
"plan:0:v2.8.5:a9e605fa09adc5a4b824e690b4de6f160d47d84ede5956b58a7d300cca1f7204:3973e022e93220f9212c18d0d0c543ae7c309e46640da93a4a0314de999f5112:04b3051125b5994fba6b0a22b2d8b4246cadc145be030c491a3431655d2ba07a",
932932
)
933933
.await;
934934
}
@@ -937,7 +937,7 @@ async fn query_planner_redis_update_introspection() {
937937
async fn query_planner_redis_update_defer() {
938938
test_redis_query_plan_config_update(
939939
include_str!("fixtures/query_planner_redis_config_update_defer.router.yaml"),
940-
"plan:0:v2.8.1:a9e605fa09adc5a4b824e690b4de6f160d47d84ede5956b58a7d300cca1f7204:3973e022e93220f9212c18d0d0c543ae7c309e46640da93a4a0314de999f5112:3b7241b0db2cd878b79c0810121953ba544543f3cb2692aaf1a59184470747b0",
940+
"plan:0:v2.8.5:a9e605fa09adc5a4b824e690b4de6f160d47d84ede5956b58a7d300cca1f7204:3973e022e93220f9212c18d0d0c543ae7c309e46640da93a4a0314de999f5112:3b7241b0db2cd878b79c0810121953ba544543f3cb2692aaf1a59184470747b0",
941941
)
942942
.await;
943943
}
@@ -948,7 +948,7 @@ async fn query_planner_redis_update_type_conditional_fetching() {
948948
include_str!(
949949
"fixtures/query_planner_redis_config_update_type_conditional_fetching.router.yaml"
950950
),
951-
"plan:0:v2.8.1:a9e605fa09adc5a4b824e690b4de6f160d47d84ede5956b58a7d300cca1f7204:3973e022e93220f9212c18d0d0c543ae7c309e46640da93a4a0314de999f5112:0ca695a8c4c448b65fa04229c663f44150af53b184ebdcbb0ad6862290efed76",
951+
"plan:0:v2.8.5:a9e605fa09adc5a4b824e690b4de6f160d47d84ede5956b58a7d300cca1f7204:3973e022e93220f9212c18d0d0c543ae7c309e46640da93a4a0314de999f5112:0ca695a8c4c448b65fa04229c663f44150af53b184ebdcbb0ad6862290efed76",
952952
)
953953
.await;
954954
}
@@ -959,7 +959,7 @@ async fn query_planner_redis_update_reuse_query_fragments() {
959959
include_str!(
960960
"fixtures/query_planner_redis_config_update_reuse_query_fragments.router.yaml"
961961
),
962-
"plan:0:v2.8.1:a9e605fa09adc5a4b824e690b4de6f160d47d84ede5956b58a7d300cca1f7204:3973e022e93220f9212c18d0d0c543ae7c309e46640da93a4a0314de999f5112:f7c04319556397ec4b550aa5aaa96c73689cee09026b661b6a9fc20b49e6fa77",
962+
"plan:0:v2.8.5:a9e605fa09adc5a4b824e690b4de6f160d47d84ede5956b58a7d300cca1f7204:3973e022e93220f9212c18d0d0c543ae7c309e46640da93a4a0314de999f5112:f7c04319556397ec4b550aa5aaa96c73689cee09026b661b6a9fc20b49e6fa77",
963963
)
964964
.await;
965965
}
@@ -982,7 +982,7 @@ async fn test_redis_query_plan_config_update(updated_config: &str, new_cache_key
982982
router.assert_started().await;
983983
router.clear_redis_cache().await;
984984

985-
let starting_key = "plan:0:v2.8.1:a9e605fa09adc5a4b824e690b4de6f160d47d84ede5956b58a7d300cca1f7204:3973e022e93220f9212c18d0d0c543ae7c309e46640da93a4a0314de999f5112:4a5827854a6d2efc85045f0d5bede402e15958390f1073d2e77df56188338e5a";
985+
let starting_key = "plan:0:v2.8.5:a9e605fa09adc5a4b824e690b4de6f160d47d84ede5956b58a7d300cca1f7204:3973e022e93220f9212c18d0d0c543ae7c309e46640da93a4a0314de999f5112:4a5827854a6d2efc85045f0d5bede402e15958390f1073d2e77df56188338e5a";
986986
router.execute_default_query().await;
987987
router.assert_redis_cache_contains(starting_key, None).await;
988988
router.update_config(updated_config).await;

fuzz/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ reqwest = { workspace = true, features = ["json", "blocking"] }
2020
serde_json.workspace = true
2121
tokio.workspace = true
2222
# note: this dependency should _always_ be pinned, prefix the version with an `=`
23-
router-bridge = "=0.5.27+v2.8.1"
23+
router-bridge = "=0.5.31+v2.8.5"
2424

2525
[dev-dependencies]
2626
anyhow = "1"

0 commit comments

Comments
 (0)