Skip to content

Commit 12f76e4

Browse files
authored
Stop echoing message body to stderr when signing. (#2520)
1 parent 0d998c8 commit 12f76e4

2 files changed

Lines changed: 15 additions & 18 deletions

File tree

cmd/crates/soroban-test/tests/it/message.rs

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -196,24 +196,31 @@ fn message_sign_does_not_leak_secret_in_error_output() {
196196
}
197197

198198
#[test]
199-
fn message_sign_escapes_control_characters_in_preview() {
199+
fn message_sign_does_not_echo_message_to_stderr() {
200200
let sandbox = TestEnv::default();
201201
let secret_key = "SAKICEVQLYWGSOJS4WW7HZJWAHZVEEBS527LHK5V4MLJALYKICQCJXMW";
202-
let malicious = "\x1b[31mRED\x1b[0m";
202+
let secret_message = "TOP_SECRET_TOKEN_abc123_DO_NOT_LEAK";
203203

204204
let output = sandbox
205205
.new_assert_cmd("message")
206-
.args(["sign", malicious, "--sign-with-key", secret_key])
206+
.args(["sign", secret_message, "--sign-with-key", secret_key])
207207
.assert()
208208
.success();
209-
210209
let stderr = String::from_utf8_lossy(&output.get_output().stderr).into_owned();
211210
assert!(
212-
!stderr.contains('\x1b'),
213-
"stderr should not contain raw ESC bytes, got: {stderr:?}"
211+
!stderr.contains(secret_message),
212+
"stderr must not echo the message (arg input), got: {stderr:?}"
214213
);
214+
215+
let output = sandbox
216+
.new_assert_cmd("message")
217+
.write_stdin(secret_message)
218+
.args(["sign", "--sign-with-key", secret_key])
219+
.assert()
220+
.success();
221+
let stderr = String::from_utf8_lossy(&output.get_output().stderr).into_owned();
215222
assert!(
216-
stderr.contains("\\x1b"),
217-
"stderr should contain escaped ESC as \\x1b, got: {stderr:?}"
223+
!stderr.contains(secret_message),
224+
"stderr must not echo the message (stdin input), got: {stderr:?}"
218225
);
219226
}

cmd/soroban-cli/src/commands/message/sign.rs

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ use crate::{
99
config::{locator, secret},
1010
print::Print,
1111
signer::{self, Signer},
12-
utils::escape_control_characters,
1312
};
1413

1514
use super::SEP53_PREFIX;
@@ -86,15 +85,6 @@ impl Cmd {
8685
let signature_base64 = sep_53_sign(&message_bytes, signer)?;
8786

8887
print.infoln(format!("Signer: {public_key}"));
89-
let message_display = if self.base64 {
90-
BASE64.encode(&message_bytes)
91-
} else {
92-
String::from_utf8_lossy(&message_bytes).to_string()
93-
};
94-
print.infoln(format!(
95-
"Message: {}",
96-
escape_control_characters(&message_display)
97-
));
9888
println!("{signature_base64}");
9989
Ok(())
10090
}

0 commit comments

Comments
 (0)