Skip to content
Open
Show file tree
Hide file tree
Changes from 13 commits
Commits
Show all changes
21 commits
Select commit Hold shift + click to select a range
9943f15
fix: audit findings — swapped stderr/stdout labels, missing attachmen…
rafaelfiguereod-stack May 4, 2026
ce06a7f
Merge pull request #1 from rafaelfiguereod-stack/claude/setup-vibe-ka…
rafaelfiguereod-stack May 6, 2026
b2f7993
Potential fix for code scanning alert no. 29: Server-side request for…
rafaelfiguereod-stack May 6, 2026
978bd9a
Merge pull request #2 from rafaelfiguereod-stack/alert-autofix-29
rafaelfiguereod-stack May 6, 2026
de3356d
chore(deps): bump the npm_and_yarn group across 1 directory with 5 up…
dependabot[bot] May 6, 2026
88b2324
Merge pull request #3 from rafaelfiguereod-stack/dependabot/npm_and_y…
rafaelfiguereod-stack May 6, 2026
212d1ad
chore(deps): bump the npm_and_yarn group across 1 directory with 3 up…
dependabot[bot] May 11, 2026
8b236cf
Merge pull request #4 from rafaelfiguereod-stack/dependabot/npm_and_y…
rafaelfiguereod-stack May 23, 2026
dd1496d
Create SECURITY.md
rafaelfiguereod-stack May 23, 2026
15629a7
fix(deps): add pnpm overrides to resolve 36 npm vulnerabilities
rafaelfiguereod-stack May 28, 2026
d6de928
Merge pull request #5 from rafaelfiguereod-stack/ai/fix-npm-vulnerabi…
rafaelfiguereod-stack May 28, 2026
3b9df5f
fix(deps): scope glob override to v10 and fix SECURITY.md advisory URL
rafaelfiguereod-stack May 28, 2026
05ef97c
Merge pull request #6 from rafaelfiguereod-stack/ai/fix-vulnerability…
rafaelfiguereod-stack May 28, 2026
e4049a0
fix: security audit remediation — serialize PATH mutation, add safety…
claude Jun 10, 2026
b3dcabd
fix: patch critical shell-quote command injection (CVE-2026-9277)
claude Jun 10, 2026
6a920d4
fix: bump aws-lc to patched release (5 RUSTSEC advisories, 3 high)
claude Jun 10, 2026
f56526c
fix: bump rustls-webpki 0.103.10 -> 0.103.13 (3 RUSTSEC advisories)
claude Jun 10, 2026
90c0cea
fix: upgrade russh 0.48 -> 0.61 (RUSTSEC-2026-0153/0154, 7.5 high)
claude Jun 10, 2026
03ffe1b
Merge pull request #7 from rafaelfiguereod-stack/claude/setup-vibe-ka…
rafaelfiguereod-stack Jun 10, 2026
5109536
test: add russh 0.61 SSH/SFTP smoke tests for embedded-ssh
claude Jun 10, 2026
c281083
Merge pull request #8 from rafaelfiguereod-stack/claude/setup-vibe-ka…
rafaelfiguereod-stack Jun 10, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 20 additions & 0 deletions SECURITY.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
# Security Policy

## Supported Versions

The latest release is always supported with security updates. Older releases
receive fixes on a best-effort basis.

| Version | Supported |
| ------- | ------------------ |
| latest | :white_check_mark: |

## Reporting a Vulnerability

Please report security vulnerabilities by opening a **private** GitHub Security
Advisory at `https://github.com/BloopAI/vibe-kanban/security/advisories/new`.

Include a description of the issue, steps to reproduce, and your assessment of
impact. You will receive an acknowledgement within 72 hours. If the report is
accepted, a patch will be released as soon as possible and you will be credited
in the release notes.
4 changes: 2 additions & 2 deletions crates/git/src/cli.rs
Original file line number Diff line number Diff line change
Expand Up @@ -824,8 +824,8 @@ impl GitCli {
let combined = match (stdout.is_empty(), stderr.is_empty()) {
(true, true) => "Command failed with no output".to_string(),
(false, false) => format!("--- stderr\n{stderr}\n--- stdout\n{stdout}"),
(false, true) => format!("--- stderr\n{stdout}"),
(true, false) => format!("--- stdout\n{stderr}"),
(false, true) => format!("--- stdout\n{stdout}"),
(true, false) => format!("--- stderr\n{stderr}"),
};
return Err(GitCliError::CommandFailed(combined));
}
Expand Down
3 changes: 3 additions & 0 deletions crates/remote/src/routes/github_app.rs
Original file line number Diff line number Diff line change
Expand Up @@ -500,6 +500,9 @@ async fn handle_callback(
let Some(installation_id) = query.installation_id else {
return redirect_error(None, "Missing installation_id");
};
if installation_id <= 0 {
return redirect_error(None, "Invalid installation_id");
}

let Some(state_token) = query.state else {
return redirect_error(None, "Missing state parameter");
Expand Down
41 changes: 2 additions & 39 deletions crates/server/src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ use axum::Router;
use deployment::{Deployment, DeploymentError};
use server::{
DeploymentImpl, middleware::origin::validate_origin, routes, runtime::relay_registration,
startup,
};
use services::services::container::ContainerService;
use sqlx::Error as SqlxError;
Expand All @@ -12,7 +13,6 @@ use tokio_util::sync::CancellationToken;
use tower_http::validate_request::ValidateRequestHeaderLayer;
use tracing_subscriber::{EnvFilter, prelude::*};
use utils::{
assets::asset_dir,
port_file::write_port_file_with_proxy,
sentry::{self as sentry_utils, SentrySource, sentry_layer},
};
Expand Down Expand Up @@ -49,46 +49,9 @@ async fn main() -> Result<(), VibeKanbanError> {
.with(sentry_layer())
.init();

// Create asset directory if it doesn't exist
if !asset_dir().exists() {
std::fs::create_dir_all(asset_dir())?;
}

// Copy old database to new location for safe downgrades
let old_db = asset_dir().join("db.sqlite");
let new_db = asset_dir().join("db.v2.sqlite");
if !new_db.exists() && old_db.exists() {
tracing::info!(
"Copying database to new location: {:?} -> {:?}",
old_db,
new_db
);
std::fs::copy(&old_db, &new_db).expect("Failed to copy database file");
tracing::info!("Database copy complete");
}

let shutdown_token = CancellationToken::new();

let deployment = DeploymentImpl::new(shutdown_token.clone()).await?;
deployment.update_sentry_scope().await?;
deployment
.container()
.cleanup_orphan_executions()
.await
.map_err(DeploymentError::from)?;
deployment
.container()
.backfill_before_head_commits()
.await
.map_err(DeploymentError::from)?;
deployment
.container()
.backfill_repo_names()
.await
.map_err(DeploymentError::from)?;
deployment
.track_if_analytics_allowed("session_start", serde_json::json!({}))
.await;
let deployment = startup::initialize_deployment(shutdown_token.clone()).await?;
// Preload global executor options cache for all executors with DEFAULT presets
tokio::spawn(async move {
executors::executors::utils::preload_global_executor_options_cache().await;
Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@
"esbuild": "^0.27.2",
"jwt-decode": "^4.0.0",
"typescript": "^5.7.0",
"vite": "^7.3.1"
"vite": "^7.3.2"
},
"engines": {
"node": ">=20",
Expand Down
6 changes: 3 additions & 3 deletions packages/local-web/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,7 @@
"immer": "^11.1.3",
"jwt-decode": "^4.0.0",
"lexical": "^0.36.2",
"lodash": "^4.17.21",
"lodash": "^4.18.1",
"lucide-react": "^0.539.0",
"posthog-js": "^1.276.0",
"react": "^18.2.0",
Expand Down Expand Up @@ -120,10 +120,10 @@
"eslint-plugin-react-hooks": "^4.6.0",
"eslint-plugin-react-refresh": "^0.4.5",
"eslint-plugin-unused-imports": "^4.1.4",
"postcss": "^8.4.32",
"postcss": "^8.5.10",
"prettier": "^3.6.1",
"tailwindcss": "^3.4.0",
"typescript": "^5.9.2",
"vite": "^7.3.1"
"vite": "^7.3.2"
}
}
4 changes: 2 additions & 2 deletions packages/remote-web/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -41,11 +41,11 @@
"@vitejs/plugin-react": "^4.2.1",
"autoprefixer": "^10.4.16",
"babel-plugin-react-compiler": "^1.0.0",
"postcss": "^8.4.32",
"postcss": "^8.5.10",
"tailwind-scrollbar": "^3.1.0",
"tailwindcss": "^3.4.0",
"tailwindcss-animate": "^1.0.7",
"typescript": "^5.9.2",
"vite": "^7.3.1"
"vite": "^7.3.2"
}
}
10 changes: 5 additions & 5 deletions packages/web-core/package.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "@vibe/web-core",
"private": true,
"version": "0.1.18",
"version": "0.1.44",
"type": "module",
"exports": {
"./project-fallback-page": "./src/project-routes/ProjectFallbackPage.tsx",
Expand Down Expand Up @@ -69,9 +69,9 @@
"immer": "^11.1.3",
"jwt-decode": "^4.0.0",
"lexical": "^0.36.2",
"lodash": "^4.17.21",
"lodash": "^4.18.1",
"lucide-react": "^0.539.0",
"mermaid": "^11.4.0",
"mermaid": "^11.15.0",
"posthog-js": "^1.276.0",
"react": "^18.2.0",
"react-compiler-runtime": "^1.0.0",
Expand Down Expand Up @@ -125,10 +125,10 @@
"eslint-plugin-react-hooks": "^4.6.0",
"eslint-plugin-react-refresh": "^0.4.5",
"eslint-plugin-unused-imports": "^4.1.4",
"postcss": "^8.4.32",
"postcss": "^8.5.10",
"prettier": "^3.6.1",
"tailwindcss": "^3.4.0",
"typescript": "^5.9.2",
"vite": "^7.3.1"
"vite": "^7.3.2"
}
}
Loading