T03 · Remote Payload Retrieval and Execution
- Location
README.md:21- Finding
Mutable Remote Script Is Downloaded and Executed Without Verification
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
The skill matches its GitHub authentication purpose, but it asks users to run mutable remote shell code and create broad, durable GitHub credentials with account-changing verification steps.
Install only after reviewing the scripts locally. Avoid the curl-to-bash command, prefer a passphrase-protected SSH key, use a fine-grained short-lived token with only the permissions you need, and do not run the create/delete repository verification unless you explicitly want account-state changes.
README.md:21Mutable Remote Script Is Downloaded and Executed Without Verification
setup.sh:50Authentication Setup Encourages Broad, Long-Lived Credentials and an Unencrypted SSH Key
setup.sh:193Verification Performs Unnecessary Public Repository Creation and Destructive Deletion
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
Configures **complete passwordless authentication** for GitHub using:
1. **SSH Keys** - Zero-password Git operations (push/pull/clone)
2. **Personal Access Token** - Zero-password repository management
**One-time setup, lifetime convenience!**
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
Configures **complete passwordless authentication** for GitHub using:
1. **SSH Keys** - Zero-password Git operations (push/pull/clone)
2. **Personal Access Token** - Zero-password repository management
**One-time setup, lifetime convenience!**
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
Configures **complete passwordless authentication** for GitHub using:
1. **SSH Keys** - Zero-password Git operations (push/pull/clone)
2. **Personal Access Token** - Zero-password repository management
**One-time setup, lifetime convenience!**
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
Configures **complete passwordless authentication** for GitHub using:
1. **SSH Keys** - Zero-password Git operations (push/pull/clone)
2. **Personal Access Token** - Zero-password repository management
**One-time setup, lifetime convenience!**
The use of '| bash' chains network retrieval directly into shell execution, eliminating the user's opportunity to inspect the contents before running them. This pattern is especially risky in setup skills because it normalizes blind execution and can be abused for command chaining, persistence, or credential theft if the remote script is ever altered maliciously.
curl -fsSL https://raw.githubusercontent.com/happydog-intj/github-passwordless-setup/master/setup.sh | bash
The README instructs users to fetch and immediately execute a remote shell script via curl ... | bash, which prevents review of the script before execution and gives the remote content full code-execution capability on the user's machine. In the context of a credential-setup skill, this is especially dangerous because the script likely handles SSH keys and GitHub authentication state, so a compromised script or repository could exfiltrate tokens, private keys, or alter git/gh configuration.
The | bash pipeline removes the user's opportunity to inspect downloaded content and immediately turns a network fetch into arbitrary shell execution. In a setup tool that manages passwordless GitHub access, this materially increases risk because a malicious script could silently harvest credentials or implant persistence in shell and git configuration.
curl -fsSL https://raw.githubusercontent.com/happydog-intj/github-passwordless-setup/master/setup.sh | bash
The skill’s stated purpose is authentication setup, but it also performs active verification with side effects, including creating and deleting a repository on the user’s GitHub account. That mismatch can cause unexpected account actions and broadens the trust required from the user beyond simple local configuration.
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
---
name: github-passwordless-setup
description: Complete GitHub passwordless authentication setup using SSH keys and Personal Access Tokens. Never type passwords or re-authenticate for Git operations and GitHub API calls.
---
# GitHub Passwordless Setup
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
---
name: github-passwordless-setup
description: Complete GitHub passwordless authentication setup using SSH keys and Personal Access Tokens. Never type passwords or re-authenticate for Git operations and GitHub API calls.
---
# GitHub Passwordless Setup
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
---
name: github-passwordless-setup
description: Complete GitHub passwordless authentication setup using SSH keys and Personal Access Tokens. Never type passwords or re-authenticate for Git operations and GitHub API calls.
---
# GitHub Passwordless Setup
curl ... | bash is a classic dangerous chaining pattern because it turns remote content into immediate code execution without inspection, provenance validation, or pinning. In this skill context, the command is especially risky because it is presented as the primary quick-start path.
One-line automated setup:
curl -fsSL https://raw.githubusercontent.com/happydog-intj/github-passwordless-setup/master/setup.sh | bash
Or follow the manual steps below.
Tool calls are chained to bypass individual safety checks or escalate capabilities beyond what any single tool call would allow.
Linux (Debian/Ubuntu):
type -p curl >/dev/null || (sudo apt update && sudo apt install curl -y)
curl -fsSL https://cli.github.com/packages/githubcli-archive-keyring.gpg | sudo dd of=/usr/share/keyrings/githubcli-archive-keyring.gpg
sudo chmod go+r /usr/share/keyrings/githubcli-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/githubcli-archive-keyring.gpg] https://cli.github.com/packages stable main" | sudo tee /etc/apt/sources.list.d/github-cli.list > /dev/null
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
Linux (Debian/Ubuntu):
type -p curl >/dev/null || (sudo apt update && sudo apt install curl -y)
curl -fsSL https://cli.github.com/packages/githubcli-archive-keyring.gpg | sudo dd of=/usr/share/keyrings/githubcli-archive-keyring.gpg
sudo chmod go+r /usr/share/keyrings/githubcli-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/githubcli-archive-keyring.gpg] https://cli.github.com/packages stable main" | sudo tee /etc/apt/sources.list.d/github-cli.list > /dev/null
sudo apt update
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
Linux (Debian/Ubuntu):
type -p curl >/dev/null || (sudo apt update && sudo apt install curl -y)
curl -fsSL https://cli.github.com/packages/githubcli-archive-keyring.gpg | sudo dd of=/usr/share/keyrings/githubcli-archive-keyring.gpg
sudo chmod go+r /usr/share/keyrings/githubcli-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/githubcli-archive-keyring.gpg] https://cli.github.com/packages stable main" | sudo tee /etc/apt/sources.list.d/github-cli.list > /dev/null
sudo apt update
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
Linux (Debian/Ubuntu):
type -p curl >/dev/null || (sudo apt update && sudo apt install curl -y)
curl -fsSL https://cli.github.com/packages/githubcli-archive-keyring.gpg | sudo dd of=/usr/share/keyrings/githubcli-archive-keyring.gpg
sudo chmod go+r /usr/share/keyrings/githubcli-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/githubcli-archive-keyring.gpg] https://cli.github.com/packages stable main" | sudo tee /etc/apt/sources.list.d/github-cli.list > /dev/null
sudo apt update
Piping remotely fetched content directly into a privileged writer (curl ... | sudo dd) reduces user visibility into what is being installed and amplifies the impact of a compromised upstream or network path. While common in repository setup snippets, it is still an unsafe pattern because untrusted bytes are immediately committed under elevated privileges.
Linux (Debian/Ubuntu):
type -p curl >/dev/null || (sudo apt update && sudo apt install curl -y)
curl -fsSL https://cli.github.com/packages/githubcli-archive-keyring.gpg | sudo dd of=/usr/share/keyrings/githubcli-archive-keyring.gpg
sudo chmod go+r /usr/share/keyrings/githubcli-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/githubcli-archive-keyring.gpg] https://cli.github.com/packages stable main" | sudo tee /etc/apt/sources.list.d/github-cli.list > /dev/null
sudo apt update
Piping repository configuration text into sudo tee writes privileged configuration non-interactively and encourages users not to inspect the exact file contents before installation. In combination with other setup steps, this increases the chance of silently adding an unintended package source.
type -p curl >/dev/null || (sudo apt update && sudo apt install curl -y) curl -fsSL https://cli.github.com/packages/githubcli-archive-keyring.gpg | sudo dd of=/usr/share/keyrings/githubcli-archive-keyring.gpg sudo chmod go+r /usr/share/keyrings/githubcli-archive-keyring.gpg echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/githubcli-archive-keyring.gpg] https://cli.github.com/packages stable main" | sudo tee /etc/apt/sources.list.d/github-cli.list > /dev/null sudo apt update sudo apt install gh -y
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
ssh-add ~/.ssh/id_ed25519
ssh-add --apple-use-keychain ~/.ssh/id_ed25519
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
ssh-add ~/.ssh/id_ed25519
ssh-add --apple-use-keychain ~/.ssh/id_ed25519
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
ssh-add ~/.ssh/id_ed25519
ssh-add --apple-use-keychain ~/.ssh/id_ed25519
**Problem: "Host key verification failed"**
The GH_TOKEN export example promotes storing a sensitive PAT in an environment variable, which can be exposed to subprocesses, debugging tools, logs, and misconfigured shell profiles. In contrast, the GIT_SSH_COMMAND portion is not the issue; the danger is teaching persistent token exposure patterns.
export GH_TOKEN="ghp_xxxxx" # Auto-auth for gh commands
export GIT_SSH_COMMAND="ssh -i ~/.ssh/id_ed25519" # Force specific key
Add to your shell profile (`~/.bashrc`, `~/.zshrc`):
Prompting the user to paste a GitHub Personal Access Token into the terminal is credential handling that increases exposure risk, especially when the script recommends broad repo access and long-lived tokens. In this skill context, collecting privileged credentials is expected but still more dangerous because the token can enable account-wide API actions beyond simple Git transport.
# Logout any existing sessions
gh auth logout -h github.com 2>/dev/null || true
echo "Please paste your GitHub Personal Access Token:"
gh auth login --with-token
# Set git protocol to SSH
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
# Check 1: SSH Key
echo -e "${YELLOW}1️⃣ Checking SSH Key...${NC}"
if [ -f ~/.ssh/id_ed25519.pub ] || [ -f ~/.ssh/id_rsa.pub ]; then
echo -e "${GREEN} ✅ SSH key exists${NC}"
# Test connection
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
# Check 1: SSH Key
echo -e "${YELLOW}1️⃣ Checking SSH Key...${NC}"
if [ -f ~/.ssh/id_ed25519.pub ] || [ -f ~/.ssh/id_rsa.pub ]; then
echo -e "${GREEN} ✅ SSH key exists${NC}"
# Test connection
No suspicious patterns detected.