Repository navigation
fix: backport Lightning security update to rc66 for Bitkit 2.5.1 - #124
Conversation
talosmachina
left a comment
There was a problem hiding this comment.
No findings. Backports the lightning, lightning-liquidity and lightning-transaction-sync 0.2.7 bump onto the v0.7.0-rc.66 source and commits a lockfile for it. Reviewed 67929be, full tier (dependency manifest and lock).
What I checked, and 4 candidates I ruled out
Base: base/v0.7.0-rc.66 is 190a17d, the commit v0.7.0-rc.66 points at; outside Cargo.lock the diff is the three Cargo.toml requirements, the CHANGELOG line and the .gitignore rule.
Lockfile: production lightning* crates resolve to 0.2.7 (lightning, -liquidity, -transaction-sync); the other lightning-* 0.2.x entries are unchanged requirements. The ldk-node 0.6.2 / lightning 0.1.x entries are outside the normal dependency tree (cargo tree -e normal -i ldk-node@0.6.2 prints nothing). Apart from the root package version, the graph is identical to #123's lock.
Ran on this box, Rust 1.85 (the crate's rust-version): cargo test --lib --locked: 102 passed, 0 failed. cargo check --locked --features uniffi: passes, 6 warnings. cargo metadata --locked resolves on 1.85 and stable, so the committed lock is accepted unchanged.
Upstream: the 0.2.7 release notes list #5057 (conflicting commitment signing after a reconnect), #5042 (LSPS2 JIT intercepted-HTLC amount) and #4867 (Electrum sync pulling many transactions from a crafted funding tx); all three sit in the crates this PR bumps.
CI: no checks ran on this branch. Not run here: integration tests (bitcoind/electrs), bindgen.sh, mobile builds.
Ruled out
- Lock is not the rc.66 build graph: true, and the description says so and asks for that approval explicitly; a decision for the release owner, not a defect in the diff.
- Dropping the
Cargo.lockignore rule also exposesbindings/uniffi-bindgen/Cargo.lock: no, a lock created there still shows as untracked, not committed by accident; nothing inbindgen.shstages it. - 0.2.0 to 0.2.7 API or serialization drift on the rc.66 code: same minor line, the crate and its UniFFI surface compile unchanged, unit tests pass, and main already runs these versions (#123).
- Version files and CHANGELOG heading still say rc.66: stated as outstanding in the description, and nothing here tags or publishes.
Merge confidence: 4/5, a dependency change on a payments path with no CI and no integration test run against it.
Partial validationRan locally on 67929be, with locked dependencies. The PR still points to this revision.
Integration validation remains incomplete. A bounded control using rc.66 source and the pre-security dependency graph (Lightning 0.2.5, liquidity 0.2.3, transaction-sync 0.2.1) reproduced the same splice-signing error and stall. This points to an existing issue under that controlled graph; it is not evidence of a new regression from these three dependency bumps, nor a reconstruction of the original shipped binary's dependencies. Environment: macOS arm64, Rust/Cargo 1.90.0, isolated Bitcoin 27.2 and electrs No independent vulnerability reproduction or Android/iOS build/device validation was performed. This is partial validation, not full integration sign-off or shipping approval. Prepared log archive: |
|
@piotr-iohk I'm taking the release prep here too, after #123: version files for |
|
Release prep for
|
There was a problem hiding this comment.
Verdict: ✅ Approve
Review: diff 9 files.
Findings:
N/A
Proven at 0692193:
- Every rebuilt binary (Android
.so, JVM dylibs, xcframework slices) embedslightning,lightning-liquidityandlightning-transaction-sync0.2.7 and no older version. The rc.66 binaries embed 0.2.5, 0.2.3 and 0.2.1. - The
Package.swiftchecksum matches the builtLDKNodeFFI.xcframework.zip. - The committed lockfile is the rc.71 graph plus the three bumps.
Cargo.tomlat rc.66 and rc.71 differ only in the version, so this graph is approved for rc.66.1. - On Linux, at the same Rust source and lockfile (67929be), these pass: the lib tests,
reorg_test, the 41integration_tests_rusttests outside the channel cycles and the splice, and the 108multi_address_types_tests. One electrs setup flake passed on rerun.
Not proven:
channel_full_cycle*andsplice_channelstall at splice funding signing. They stall the same way on rc.66 with 0.2.5, so this predates the PR and is tracked separately.- The uploaded release zip and the published Android package: the zip's checksum and the AAR's crate versions wait for publishing.
- App upgrade, recovery and payment checks on the
release-2.5.1builds.
Reviewed by claude-opus-5-5 via gh-pr-review-loop skill
Commands: @ovi-reviewer review · test · retest
Release |
Apply the same three Lightning 0.2.7 dependency updates as the main-line security draft #123 to the source shipped as
v0.7.0-rc.66(190a17d). This keeps the newer coin-selection, explicit broadcast-result and prepared-payment/retry changes out of the proposed Bitkit 2.5.1 hotfix.The base branch
base/v0.7.0-rc.66is an unchanged pointer to the released tag. This PR targets that base rather than reverting newer work on main. No Rust implementation or mobile API changes are included.rc.66 did not commit a dependency lockfile. This draft commits the security branch’s controlled lockfile, with only the root node version adjusted to rc.66, and removes its ignore rule. That graph is a candidate for review; it is not a reconstruction of the original rc.66 binary build dependencies.
Intended node release:
0.7.0-rc.66.1, consumed by Android/iOSrelease-2.5.1branches created from the appv2.5.0tags. Version files still identify rc.66: release-version preparation, native rebuilds and publishing remain outstanding, so this draft must not be tagged or merged as a finished release.Validation
0.7.0-rc.66.1, passed with local fixtures. These were version-handling checks, not LDK builds.Before release
Proposed release split. Android/iOS PRs will follow only after the chosen node versions are published.