Acme-Claude-Shell

 view release on metacpan or  search on metacpan

lib/Acme/Claude/Shell/Tools.pm  view on Meta::CPAN

The following patterns trigger additional safety warnings:

=over 4

=item * C<rm -rf>, C<rm --recursive>, C<rm --force>

=item * C<sudo> commands

=item * C<mkfs>, C<dd of=>, device writes

=item * C<chmod 777>, C<chown -R>

=item * C<kill -9>, C<reboot>, C<shutdown>, C<halt>, C<poweroff>

=item * Fork bombs, remote script piping (curl/wget | sh)

=back

=cut

sub shell_tools {

lib/Acme/Claude/Shell/Tools.pm  view on Meta::CPAN

    { pattern => qr/\brm\s+(-[rf]+|--recursive|--force)/i,
      reason  => 'Recursive or forced file deletion' },
    { pattern => qr/\bsudo\b/,
      reason  => 'Superuser command' },
    { pattern => qr/\bmkfs\b/,
      reason  => 'Filesystem formatting' },
    { pattern => qr/\bdd\b.*\bof=/,
      reason  => 'Direct disk write' },
    { pattern => qr/>\s*\/dev\//,
      reason  => 'Writing to device file' },
    { pattern => qr/\bchmod\s+(-R\s+)?777\b/,
      reason  => 'World-writable permissions' },
    { pattern => qr/\bchown\s+-R\b.*\//,
      reason  => 'Recursive ownership change' },
    { pattern => qr/\bkill\s+-9\b/,
      reason  => 'Forceful process termination' },
    { pattern => qr/\b(reboot|shutdown|halt|poweroff)\b/,
      reason  => 'System shutdown/reboot' },
    { pattern => qr/\bformat\b/,
      reason  => 'Disk formatting' },
    { pattern => qr/:\s*\(\s*\)\s*\{\s*:\s*\|\s*:\s*&\s*\}\s*;/,

t/03-dangerous-patterns.t  view on Meta::CPAN

    { pattern => qr/\brm\s+(-[rf]+|--recursive|--force)/i,
      reason  => 'Recursive or forced file deletion' },
    { pattern => qr/\bsudo\b/,
      reason  => 'Superuser command' },
    { pattern => qr/\bmkfs\b/,
      reason  => 'Filesystem formatting' },
    { pattern => qr/\bdd\b.*\bof=/,
      reason  => 'Direct disk write' },
    { pattern => qr/>\s*\/dev\//,
      reason  => 'Writing to device file' },
    { pattern => qr/\bchmod\s+(-R\s+)?777\b/,
      reason  => 'World-writable permissions' },
    { pattern => qr/\bchown\s+-R\b.*\//,
      reason  => 'Recursive ownership change' },
    { pattern => qr/\bkill\s+-9\b/,
      reason  => 'Forceful process termination' },
    { pattern => qr/\b(reboot|shutdown|halt|poweroff)\b/,
      reason  => 'System shutdown/reboot' },
    { pattern => qr/\bformat\b/,
      reason  => 'Disk formatting' },
    { pattern => qr/:\s*\(\s*\)\s*\{\s*:\s*\|\s*:\s*&\s*\}\s*;/,

t/03-dangerous-patterns.t  view on Meta::CPAN

    ok(check_dangerous('dd if=file.txt of=copy.txt'), 'dd with of= is flagged (can overwrite)');
    ok(!check_dangerous('dd if=file.txt'), 'dd without of= is safer');
};

subtest 'Device writes' => sub {
    ok(check_dangerous('echo "test" > /dev/sda'), 'Device write detected');
    ok(check_dangerous('cat foo > /dev/null'), 'Write to /dev/null detected');
};

subtest 'Permission changes' => sub {
    ok(check_dangerous('chmod 777 /etc'), 'chmod 777 detected');
    ok(check_dangerous('chmod -R 777 /home'), 'chmod -R 777 detected');
    ok(!check_dangerous('chmod 755 script.sh'), 'chmod 755 is usually safe');
    ok(!check_dangerous('chmod 644 file.txt'), 'chmod 644 is safe');
};

subtest 'Ownership changes' => sub {
    ok(check_dangerous('chown -R root /'), 'chown -R detected');
    ok(check_dangerous('chown -R user:user /home/user'), 'chown -R home detected');
    ok(!check_dangerous('chown user file.txt'), 'chown single file may be ok');
};

subtest 'Process killing' => sub {
    ok(check_dangerous('kill -9 1234'), 'kill -9 detected');



( run in 0.636 second using v1.01-cache-2.11-cpan-5837b0d9d2c )