Merge pull request 'Carry dejima's canonical statements: the disclaimer, and the push rule' (#8) from maturity-disclaimer into main
Reviewed-on: #8 Reviewed-by: branderson <brad@branderson.io>
This commit was merged in pull request #8.
This commit is contained in:
@@ -29,6 +29,12 @@
|
||||
Bounds what a compromised development VM can reach on your network, and tells
|
||||
you what that bound actually is.
|
||||
|
||||
**Early development. Not ready to be depended on.** Nothing here has been
|
||||
through outside review, an external audit, or adversarial testing by anyone but
|
||||
the person who wrote it. Every security property this describes is a claim
|
||||
awaiting scrutiny, not one that has survived it. Do not put this anywhere that
|
||||
being wrong about it would matter.
|
||||
|
||||
**One maintainer, no support.** Nothing about this is promised: not a reply, not
|
||||
a fix, not a release. [SECURITY.md](SECURITY.md) has the detail, and is where to
|
||||
report a vulnerability rather than in a public issue.
|
||||
|
||||
+12
@@ -17,6 +17,18 @@ behaviour because the rules live where the guest cannot read them.
|
||||
[docs/threat-model.md](docs/threat-model.md) states what each layer grants, and
|
||||
which stronger options were rejected and why.
|
||||
|
||||
## This is not proven software
|
||||
|
||||
These projects are in early development. Nothing in them has been through
|
||||
outside review, an external audit, or adversarial testing by anyone other than
|
||||
the people who wrote them. Where a design argument is stated it is one person's
|
||||
reasoning; where a test asserts something it asserts what that person thought
|
||||
to check.
|
||||
|
||||
Treat every security property described in any of these repositories as a claim
|
||||
awaiting scrutiny rather than one that has survived it, and do not deploy them
|
||||
where being wrong would matter.
|
||||
|
||||
## Reporting a vulnerability
|
||||
|
||||
Email **dejima@branderson.io**. Please do not open a public issue for a
|
||||
|
||||
@@ -100,6 +100,14 @@ with your personal key. The difference shows up exactly once, on the day the box
|
||||
is owned: a scoped token is revoked and reissued, and a personal key is every
|
||||
repository and every host that trusts it.
|
||||
|
||||
**Do not give a session push access to a forge it is not being used to push
|
||||
to.** A session's forge is the one you chose; everywhere else is where its
|
||||
dependencies and its reading live. dejima blocks GitHub push by default for
|
||||
that reason and states the argument in full, including what an unsolicited pull
|
||||
request costs the people receiving it, at [GitHub push: blocked by
|
||||
default](https://gitbox.branderson.io/dejima/dejima/src/branch/main/docs/security.md#github-push-blocked-by-default-optional-opt-in).
|
||||
It is not restated here, so that there is one copy of it to keep right.
|
||||
|
||||
**Do not forward your agent in.** `ssh -A` lends this VM your keys for the life
|
||||
of the session, and this is a VM whose threat model says it may be owned. In
|
||||
your SSH config, for this host:
|
||||
|
||||
@@ -1,5 +1,11 @@
|
||||
# Threat model
|
||||
|
||||
**And none of it has been reviewed by anyone else.** This is early development:
|
||||
the reasoning here is one person's, the tests assert what that person thought to
|
||||
check, and no outside audit or adversarial testing has happened. Read what
|
||||
follows as claims awaiting scrutiny rather than claims that have survived it.
|
||||
See [SECURITY.md](../SECURITY.md).
|
||||
|
||||
What this defends, what it does not, and which options were rejected on
|
||||
purpose. The last section matters most: it exists so a decision can be
|
||||
overturned on new information rather than re-argued from nothing.
|
||||
|
||||
@@ -0,0 +1,28 @@
|
||||
#!/usr/bin/env bats
|
||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||
# Copyright (C) 2026 Brad Anderson
|
||||
#
|
||||
# The maturity disclaimer, pinned in all three places a reader can land.
|
||||
#
|
||||
# A repository that argues at length for its own security properties is exactly
|
||||
# the one that has to say those properties are unreviewed. It is also the line
|
||||
# most likely to be quietly dropped as a project starts to feel established -
|
||||
# not by decision, but by a rewrite of a section that happened to contain it.
|
||||
#
|
||||
# Nothing else here would notice. Every other test in this suite would still
|
||||
# pass on a repository that had lost it.
|
||||
|
||||
setup() {
|
||||
REPO="$(cd "$BATS_TEST_DIRNAME/.." && pwd)"
|
||||
}
|
||||
|
||||
@test "every entry point says this is unreviewed early development" {
|
||||
for f in README.md SECURITY.md docs/threat-model.md; do
|
||||
grep -q 'reviewed by anyone else\|outside review' "$REPO/$f" || {
|
||||
echo "$f does not say the work is unreviewed" >&2
|
||||
false
|
||||
}
|
||||
done
|
||||
grep -q 'Not ready to be depended on' "$REPO/README.md"
|
||||
grep -q 'not proven software' "$REPO/SECURITY.md"
|
||||
}
|
||||
Reference in New Issue
Block a user