CVE-2024-39314: Insufficient Information (NVD-CWE-noinfo)
value: toy-blog is a headless content management system implementation. Starting in version 0.4.3 and prior to version 0.5.0, the administrative password was leaked through the command line parameter. The problem was patched in version 0.5.0. As a workaround, pass `--read-bearer-token-from-stdin` to the launch arguments and feed the token from the standard input in version 0.4.14 or later. Earlier versions do not have this workaround.
CWE description: There is insufficient information about the issue to classify it; details are unkown or unspecified.
Published: 2024-07-01T22:15Z
Repository: https://github.com/KisaragiEffective/toy-blog
Language: Rust
Files changed: README.md, src/main.rs
Commit date: 2023-04-15 02:45:51 +0900
Commit message: fix!: remove --bearer-token

Diff: diff --git a/README.md b/README.md
index 9d1668c..9e9e5a2 100644
--- a/README.md
+++ b/README.md
@@ -3,23 +3,23 @@
 [`KisaragiEffective`](https://github.com/KisaragiEffective/) が開発する実験用のブログ。
 
 ## How to run
 ```sh
 cargo run -- \
-  --bearer-token=INSERT_YOUR_OWN_PASSWORD \
   --http-host=127.0.0.1 \
   --http-port=8080 \
   --telnet-host=127.0.0.1 \
   --telnet-port=12345
 ```
 
 ### 解説
-* `--bearer-token`: 記事を更新するときのパスワードを設定する。このパスワードは使い回さないこと。このパスワードは永続化されないので、起動するたびに入力する必要がある。
+* `--bearer-token`: 廃止。標準入力から改行終端で与えること。
 * `--http-host`: HTTPサーバーのホスト。通常は`127.0.0.1`を指定して良い。
 * `--http-port`: HTTPサーバーのポート番号。
 * `--telnet-host`: telnetサーバーのホスト。通常は`127.0.0.1`を指定して良い。
 * `--telnet-port`: telnetサーバーのポート番号。
+* `--read-bearer-token-from-stdin`: 次のメジャーバージョンで廃止予定。このスイッチはもはや互換性のためだけに残されている。
 
 ### 動作させるにあたっての注意事項
 * Cloudflareのトンネルを使っている場合、`--cloudflare`スイッチを付け足すこと。
 
 ## 永続化
diff --git a/src/main.rs b/src/main.rs
index 851ef3b..0dda34d 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -35,23 +35,21 @@ struct Args {
 }
 
 #[derive(Subcommand)]
 enum Commands {
     Run {
-        /// DEPRECATED
-        #[clap(long)]
-        bearer_token: Option<String>,
         #[clap(long)]
         http_port: u16,
         #[clap(long)]
         http_host: String,
         #[clap(long)]
         telnet_port: u16,
         #[clap(long)]
         telnet_host: String,
         #[clap(long = "cloudflare")]
         cloudflare_support: bool,
+        /// DEPRECATED, It will be removed in next major version. This switch is no-op.
         #[clap(long)]
         read_bearer_token_from_stdin: bool,
     },
     Import {
         #[clap(long)]
@@ -84,29 +82,22 @@ fn setup_logger() -> Result<()> {
 async fn main() -> Result<()> {
     setup_logger().unwrap_or_default();
     let args: Args = Args::parse();
     match args.subcommand {
         Commands::Run {
-            bearer_token,
             http_port,
             http_host,
             telnet_port,
             telnet_host,
             cloudflare_support,
             read_bearer_token_from_stdin
         } => {
-            let bearer_token = bearer_token.map_or_else(|| if read_bearer_token_from_stdin {
+            let bearer_token = {
                 let mut buf = String::new();
                 stdin().read_line(&mut buf).expect("failed to read from stdin");
                 buf.trim_end().to_string()
-            } else {
-                eprintln!("You must set bearer token to protecting your server.");
-                exit(1)
-            }, |token| {
-                eprintln!("--bearer-token is unsecure. It will be removed by next major release. Please use --read-bearer-token-from-stdin.");
-                token
-            });
+            };
 
             WRITE_TOKEN.set(bearer_token).unwrap();
 
             let http_server = HttpServer::new(move || {
                 let logger_format = if cloudflare_support {

Vulnerable code:   --bearer-token=INSERT_YOUR_OWN_PASSWORD \
* `--bearer-token`: 記事を更新するときのパスワードを設定する。このパスワードは使い回さないこと。このパスワードは永続化されないので、起動するたびに入力する必要がある。
        /// DEPRECATED
        #[clap(long)]
        bearer_token: Option<String>,
            bearer_token,
            let bearer_token = bearer_token.map_or_else(|| if read_bearer_token_from_stdin {
            } else {
                eprintln!("You must set bearer token to protecting your server.");
                exit(1)
            }, |token| {
                eprintln!("--bearer-token is unsecure. It will be removed by next major release. Please use --read-bearer-token-from-stdin.");
                token
            });
Fixed code: * `--bearer-token`: 廃止。標準入力から改行終端で与えること。
* `--read-bearer-token-from-stdin`: 次のメジャーバージョンで廃止予定。このスイッチはもはや互換性のためだけに残されている。
        /// DEPRECATED, It will be removed in next major version. This switch is no-op.
            let bearer_token = {
            };