Security News
Research
Data Theft Repackaged: A Case Study in Malicious Wrapper Packages on npm
The Socket Research Team breaks down a malicious wrapper package that uses obfuscation to harvest credentials and exfiltrate sensitive data.
Satori allows you to assert how systems and software behave. Automatize software and system testing using three different approaches:
Three steps:
pip3 install satori-ci
satori config token YOUR_TOKEN
You can take actions on:
Now, lets test software.
Consider the following example "Hello World" program written in Python:
print("Hello World")
If save that into a file named hello_world.py
and we execute this program, we would see the following on the console:
foo@bar:~$ python hello_world.py
Hello World
How can you test aumatically that that piece of software behaves according to specification? You can write a Satori Playbook using a simple and practical notation:
foo@bar:~$ cat .satori.yml
test:
assertStdoutEqual: "Hello World\n"
python:
- [ python hello_world.py ]
Lets test the code with the playbook
foo@bar:~$ satori run ./ --sync
Satori CI 1.2.3 - Automated Software Testing Platform
Uploading... ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 331/331 bytes 0:00:00
UUID: AOQxDWDkXpZp
Report: https://satori.ci/report/AOQxDWDkXpZp
- Report status: Completed | Result: Pass | Elapsed time: 62.6s
• test: test > python
• asserts:
░ assert: assertStdoutEqual
░ status: Pass
░ expected: Hello World
- - - - - - - - - - - - - - - - - - - -
• testcases: 1
• test_status: Pass
• total_fails: 0
- - - - - - - - - - - - - - - - - - - -
The code and the Satori playbook instructions were executed on a new Docker instance hosted by AWS. Satori asserts that this piece of software output "Hello World". You can assert several things:
Is output produced?
Is the output equal to the String?
Is the output different than String?
Does the output contains the String?
Does the output not contain the String?
Is the output equal to this SHA256 hash?
Does the output matches your regexp?
Does the output not match your regexp?
The previos can also be applied to assertStderr. Finally, you can assert the return code of your the execution using assertReturnCode.
Please let us know if you need to assert something else that we is not covered by them.
We tested on demand. Now let's do it as part of your regular Github CI process.
Click on Install
Select the repositories where you will be installing it or select all repositories
By default you can get notifications via email and Github issues. If you want to get notified in slack, discord or telegram go to https://satori.ci/user-settings/ to define their details.
If you want to detail in your playbook to be notified when the scans are ready, add the following to them:
settings:
log|logOnFail|logOnPass: slack|email|issue|discord|telegram
For example:
settings:
logOnFail: slack
test:
assertStdoutEqual: Hello World
python:
- [ python hello_world.py ]
and put it on a file named .satori.yml inside your repository.
You can check which repositories you connected with a playbook by running
foo@bar:~$ satori repo
You can scan all your commits from your repository to see if there were any discrepancies at some point:
foo@bar:~$ satori repo githubusername/repository scan -c 100 --sync
Are used to assert software behaviors, wether they are source code files or live systems. You can see a list of public playbooks by running
They can be imported by playbooks that you have in your CI or on assets being Monitored.
foo@bar:~$ satori playbook --public
URI | Name
satori://code/trufflehog.yml | Trufflehog will search for secrets in your code
satori://code/semgrep.yml | Static source code analysis with semgrep
...
You can check your private playbooks executed just by running satori playbook
Playbooks can import other local or remote playbooks. We keep at TBC a list of playbooks that can be referenced with the
import:
- satori://code/trufflehog.yml
- satori://code/semgrep.yml
test:
assertStdoutEqual: Hello World
python:
- [ python hello_world.py ]
We will store a copy of the playbooks that you have executed and show them to you whenever you execute the command:
foo@bar:~$ satori playbooks private
Type | URI | Name | Imports
CI | github://satorici/satori/.satori.yml | |
Monitor | github://satorici/playbooks/test/satori/monitor.yml | Monitor Assets | monitorBlog.yml
Run | github://satorici/playbooks/test/satori/monitorBlog.yml | Monitor Blog |
...
Is there a playbook that you would like us to add? Drop us a line at support@satori.ci
Assert that your systems are running as expected by setting a schedule for your playbook. Playbooks that define a schedule can be monitored with:
satori monitor
For example, you can define schedule a crontab rate to a playbook just as in the following exmaple to verify the Hello World website from Satori every hour:
settings:
- name: Monitor Blog
- schedule: "0 * * * *"
- logOnFail: slack
test:
assertStdout: "Hello World"
blog:
- [ curl -s https://satori.ci/hello-world/ ]
FAQs
Satori CI - Automated Testing
We found that satori-ci demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 2 open source maintainers collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
Research
The Socket Research Team breaks down a malicious wrapper package that uses obfuscation to harvest credentials and exfiltrate sensitive data.
Research
Security News
Attackers used a malicious npm package typosquatting a popular ESLint plugin to steal sensitive data, execute commands, and exploit developer systems.
Security News
The Ultralytics' PyPI Package was compromised four times in one weekend through GitHub Actions cache poisoning and failure to rotate previously compromised API tokens.