balrog.git


balrog

~ ELF file analysis tool to be used after firmware extraction
git clone https://github.com/djnnvx/balrog.git
log | files | refs | archive | README

scorecard.rs (1524B)

      1 use std::process::Command;
      2 
      3 fn run(bin: &str, class: &str) -> String {
      4     let exe = env!("CARGO_BIN_EXE_balrog");
      5     let out = Command::new(exe)
      6         .args([
      7             "scan",
      8             bin,
      9             "--class",
     10             class,
     11             "--min=0",
     12             "--per-bin=99",
     13             "-n",
     14             "10",
     15         ])
     16         .output()
     17         .expect("balrog runs");
     18     String::from_utf8_lossy(&out.stdout).into_owned()
     19 }
     20 
     21 fn expect(var: &str, class: &str, proofs: &[&str]) {
     22     let Ok(path) = std::env::var(var) else {
     23         eprintln!("skip {var}: not set");
     24         return;
     25     };
     26     let out = run(&path, class);
     27     for p in proofs {
     28         assert!(out.contains(p), "{var}: missing evidence {p:?} in:\n{out}");
     29     }
     30 }
     31 
     32 #[test]
     33 fn proftpd_efmlog_stack_overflow() {
     34     expect(
     35         "BALROG_PROFTPD",
     36         "mem",
     37         &[
     38             "sprintf",
     39             "\"%s(%s)\"",
     40             "destination is a stack buffer",
     41             "unbounded write",
     42         ],
     43     );
     44 }
     45 
     46 #[test]
     47 fn easydisc_udp_command_injection() {
     48     expect(
     49         "BALROG_EASYDISC",
     50         "exec",
     51         &[
     52             "system",
     53             "dev_sta set -m esw_networkId_merge",
     54             "same function as a network/env input",
     55         ],
     56     );
     57 }
     58 
     59 #[test]
     60 fn porter_unauthenticated_root_socket() {
     61     expect(
     62         "BALROG_PORTER",
     63         "ipc",
     64         &[
     65             "bind",
     66             "/tmp/porter.sock",
     67             "no SO_PEERCRED",
     68             "qid_sys_execute_update_script",
     69         ],
     70     );
     71 }