use crate::{finding_builder, soft404, MAX_BODY_BYTES};
use futures::StreamExt;
use gossan_core::{try_push_finding, Target};
use secfinding::{Evidence, Finding, Severity};
const PARALLEL_REQUESTS: usize = 25;
struct BackupCheck {
path: &'static str,
title: &'static str,
severity: Severity,
content_probe: Option<&'static str>,
magic: &'static [&'static [u8]],
}
const BACKUP_CHECKS: &[BackupCheck] = &[
BackupCheck {
path: "/backup.zip",
title: "Backup archive (zip) exposed",
severity: Severity::Critical,
content_probe: None,
magic: &[b"PK\x03\x04"],
},
BackupCheck {
path: "/backup.tar",
title: "Backup archive (tar) exposed",
severity: Severity::Critical,
content_probe: None,
magic: &[b"\x1f\x8b", b"ustar"],
},
BackupCheck {
path: "/backup.tar.gz",
title: "Backup archive (tar.gz) exposed",
severity: Severity::Critical,
content_probe: None,
magic: &[b"\x1f\x8b"],
},
BackupCheck {
path: "/site.zip",
title: "Site snapshot exposed",
severity: Severity::Critical,
content_probe: None,
magic: &[b"PK\x03\x04"],
},
BackupCheck {
path: "/website.zip",
title: "Website snapshot exposed",
severity: Severity::Critical,
content_probe: None,
magic: &[b"PK\x03\x04"],
},
BackupCheck {
path: "/www.zip",
title: "wwwroot snapshot exposed",
severity: Severity::Critical,
content_probe: None,
magic: &[b"PK\x03\x04"],
},
BackupCheck {
path: "/htdocs.zip",
title: "htdocs snapshot exposed",
severity: Severity::Critical,
content_probe: None,
magic: &[b"PK\x03\x04"],
},
BackupCheck {
path: "/public_html.zip",
title: "public_html snapshot exposed",
severity: Severity::Critical,
content_probe: None,
magic: &[b"PK\x03\x04"],
},
BackupCheck {
path: "/admin.zip",
title: "/admin snapshot exposed",
severity: Severity::Critical,
content_probe: None,
magic: &[b"PK\x03\x04"],
},
BackupCheck {
path: "/db.sql",
title: "SQL dump exposed",
severity: Severity::Critical,
content_probe: Some("CREATE TABLE"),
magic: &[],
},
BackupCheck {
path: "/dump.sql",
title: "SQL dump exposed",
severity: Severity::Critical,
content_probe: Some("INSERT INTO"),
magic: &[],
},
BackupCheck {
path: "/dump.sql.gz",
title: "Gzipped SQL dump exposed",
severity: Severity::Critical,
content_probe: None,
magic: &[b"\x1f\x8b"],
},
BackupCheck {
path: "/data.sql",
title: "SQL dump exposed",
severity: Severity::Critical,
content_probe: Some("INSERT INTO"),
magic: &[],
},
BackupCheck {
path: "/database.sql",
title: "SQL dump exposed",
severity: Severity::Critical,
content_probe: Some("CREATE TABLE"),
magic: &[],
},
BackupCheck {
path: "/backup.sql",
title: "SQL dump exposed",
severity: Severity::Critical,
content_probe: Some("CREATE TABLE"),
magic: &[],
},
BackupCheck {
path: "/mysql.sql",
title: "MySQL dump exposed",
severity: Severity::Critical,
content_probe: Some("INSERT INTO"),
magic: &[],
},
BackupCheck {
path: "/postgres.sql",
title: "Postgres dump exposed",
severity: Severity::Critical,
content_probe: Some("CREATE TABLE"),
magic: &[],
},
BackupCheck {
path: "/.swp",
title: "Vim swap file exposed",
severity: Severity::High,
content_probe: None,
magic: &[b"b0VIM"],
},
BackupCheck {
path: "/index.php.swp",
title: "Vim swap (index.php) exposed",
severity: Severity::High,
content_probe: None,
magic: &[b"b0VIM"],
},
BackupCheck {
path: "/index.html.swp",
title: "Vim swap (index.html) exposed",
severity: Severity::High,
content_probe: None,
magic: &[b"b0VIM"],
},
BackupCheck {
path: "/wp-config.php.swp",
title: "Vim swap (wp-config.php) exposed",
severity: Severity::Critical,
content_probe: None,
magic: &[b"b0VIM"],
},
BackupCheck {
path: "/.DS_Store",
title: ".DS_Store exposed",
severity: Severity::Low,
content_probe: None,
magic: &[b"