mirror of
https://github.com/basecamp/once-campfire.git
synced 2026-10-29 00:44:05 +09:00
Compare commits
2
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
c1d304999d | ||
|
|
d28ab55bf4 |
No files matched your search
@@ -66,6 +66,9 @@ ENV HTTP_WRITE_TIMEOUT=300
|
||||
COPY --from=build --chown=rails:rails /usr/local/bundle /usr/local/bundle
|
||||
COPY --from=build --chown=rails:rails /rails /rails
|
||||
|
||||
# Install ONCE backup/restore hooks
|
||||
COPY --chmod=755 hooks /hooks
|
||||
|
||||
# Set version and revision
|
||||
ARG APP_VERSION
|
||||
ENV APP_VERSION=$APP_VERSION
|
||||
|
||||
@@ -53,3 +53,7 @@ If you'd rather run the Docker image yourself, you can read more about that in t
|
||||
|
||||
You are welcome - and encouraged - to modify Campfire to your liking.
|
||||
Please see our [development guide](docs/development.md) for how to get Campfire set up for local development.
|
||||
|
||||
## Security
|
||||
|
||||
See [SECURITY.md](SECURITY.md) for how to report a vulnerability and a description of our trust model.
|
||||
+22
@@ -0,0 +1,22 @@
|
||||
# Security
|
||||
|
||||
Report vulnerabilities through our [HackerOne program](https://hackerone.com/basecamp) or at
|
||||
https://github.com/basecamp/once-campfire/security. Note that Campfire is in scope for our security
|
||||
program, but is not bounty eligible.
|
||||
|
||||
## Trust model
|
||||
|
||||
Campfire is self-hosted and single-tenant, so the administrator is the server operator,
|
||||
with shell, network, and database access already. Anything requiring the administrator
|
||||
role grants nothing they do not already have, and is not a vulnerability.
|
||||
|
||||
We do want reports of anything a **non-administrator** can reach, and of any credential or
|
||||
network path held by the Campfire process but not by the operator's own shell.
|
||||
|
||||
## Intentional behavior
|
||||
|
||||
Bot webhook URLs are unrestricted: an administrator can point one at any address,
|
||||
including internal ones, because operators legitimately wire bots to their own services.
|
||||
Link unfurling is different because any member can trigger it by pasting a URL, so it
|
||||
validates destinations through `RestrictedHTTP::PrivateNetworkGuard`. The difference is who
|
||||
picks the destination.
|
||||
@@ -24,6 +24,8 @@ class Webhook < ApplicationRecord
|
||||
Net::HTTP::Post.new(uri, "Content-Type" => "application/json").tap { |request| request.body = payload }
|
||||
end
|
||||
|
||||
# No PrivateNetworkGuard, unlike Opengraph::Fetch: only an administrator sets this URL,
|
||||
# and operators legitimately point bots at their own internal services.
|
||||
def http
|
||||
Net::HTTP.new(uri.host, uri.port).tap do |http|
|
||||
http.use_ssl = (uri.scheme == "https")
|
||||
|
||||
Executable
+12
@@ -0,0 +1,12 @@
|
||||
#!/bin/bash
|
||||
set -euo pipefail
|
||||
|
||||
db_name="${RAILS_ENV:-production}.sqlite3"
|
||||
snapshot="/rails/storage/backups/$db_name"
|
||||
db="/rails/storage/db/$db_name"
|
||||
|
||||
if [ -f "$snapshot" ]; then
|
||||
mkdir -p "$(dirname "$db")"
|
||||
cp "$snapshot" "$db"
|
||||
rm -f "$db-wal" "$db-shm"
|
||||
fi
|
||||
Executable
+2
@@ -0,0 +1,2 @@
|
||||
#!/bin/bash
|
||||
exec /rails/script/admin/prepare-backup
|
||||
Reference in new issue
Block a user