Security Advisories (1)
CVE-2026-94140 (2026-10-21)

Rex versions through 1.16.1 for Perl accept an unknown SSH host key for remote rsync transfers because sync hardcodes StrictHostKeyChecking=no. Every remote branch of sync builds its ssh command with that option, for password authentication, for private-key authentication and for the fallback. The ssh options a caller sets through set_openssh_opt reach the OpenSSH transport but not this command, so there is no configuration that restores host key checking for the transfer. An attacker who can redirect the connection before the real host key is known presents their own and the transfer proceeds: under password authentication sync sends the connection password to that server, an upload writes the selected local files to it, and a download writes what it returns to the local destination.

NAME

Rex::Commands::Gather - Hardware and Information gathering

DESCRIPTION

With this module you can gather hardware and software information.

All these functions will not be reported. These functions don't modify anything.

SYNOPSIS

operating_system_is("SuSE");

EXPORTED FUNCTIONS

get_operating_system

Will return the current operating system name.

task "get-os", "server01", sub {
  say get_operating_system();
};

Aliased by operating_system().

operating_system

Alias for get_operating_system()

get_system_information

Will return a hash of all system information. These Information will be also used by the template function.

kernelname

Will return the kernel name of the operating system. For example on a linux system it will return Linux.

dump_system_information

This function dumps all known system information on stdout.

operating_system_is($string)

Will return 1 if the operating system is $string.

task "is_it_suse", "server01", sub {
  if( operating_system_is("SuSE") ) {
    say "This is a SuSE system.";
  }
};

operating_system_version()

Will return the os release number as an integer. For example, it will convert 5.10 to 510, 10.04 to 1004 or 6.0.3 to 603.

task "prepare", "server01", sub {
  if( operating_system_version() >= 510 ) {
    say "OS Release is higher or equal to 510";
  }
};

operating_system_release()

Will return the os release number as is.

network_interfaces

Return an HashRef of all the networkinterfaces and their configuration.

task "get_network_information", "server01", sub {
  my $net_info = network_interfaces();
};

You can iterate over the devices as follow

my $net_info = network_interfaces();
for my $dev ( keys %{ $net_info } ) {
  say "$dev has the ip: " . $net_info->{$dev}->{"ip"} . " and the netmask: " . $net_info->{$dev}->{"netmask"};
}

memory

Return an HashRef of all memory information.

task "get_memory_information", "server01", sub {
  my $memory = memory();

  say "Total:  " . $memory->{"total"};
  say "Free:   " . $memory->{"free"};
  say "Used:   " . $memory->{"used"};
  say "Cached:  " . $memory->{"cached"};
  say "Buffers: " . $memory->{"buffers"};
};

is_freebsd

Returns true if the target system is a FreeBSD.

task "foo", "server1", "server2", sub {
  if(is_freebsd) {
    say "This is a freebsd system...";
  }
  else {
    say "This is not a freebsd system...";
  }
};

is_redhat

task "foo", "server1", sub {
  if(is_redhat) {
    # do something on a redhat system (like RHEL, Fedora, CentOS, Scientific Linux
  }
};

is_fedora

task "foo", "server1", sub {
  if(is_fedora) {
    # do something on a fedora system
  }
};

is_suse

task "foo", "server1", sub {
  if(is_suse) {
    # do something on a suse system
  }
};

is_mageia

task "foo", "server1", sub {
  if(is_mageia) {
    # do something on a mageia system (or other Mandriva followers)
  }
};

is_debian

task "foo", "server1", sub {
  if(is_debian) {
    # do something on a debian system
  }
};

is_alt

task "foo", "server1", sub {
  if(is_alt) {
    # do something on a ALT Linux system
  }
};

is_netbsd

Returns true if the target system is a NetBSD.

task "foo", "server1", "server2", sub {
  if(is_netbsd) {
    say "This is a netbsd system...";
  }
  else {
    say "This is not a netbsd system...";
  }
};

is_openbsd

Returns true if the target system is an OpenBSD.

task "foo", "server1", "server2", sub {
  if(is_openbsd) {
    say "This is an openbsd system...";
  }
  else {
    say "This is not an openbsd system...";
  }
};

is_linux

Returns true if the target system is a Linux System.

task "prepare", "server1", "server2", sub {
  if(is_linux) {
   say "This is a linux system...";
  }
  else {
   say "This is not a linux system...";
  }
};

is_bsd

Returns true if the target system is a BSD System.

task "prepare", "server1", "server2", sub {
  if(is_bsd) {
   say "This is a BSD system...";
  }
  else {
   say "This is not a BSD system...";
  }
};

is_solaris

Returns true if the target system is a Solaris System.

task "prepare", "server1", "server2", sub {
  if(is_solaris) {
   say "This is a Solaris system...";
  }
  else {
   say "This is not a Solaris system...";
  }
};

is_windows

Returns true if the target system is a Windows System.

is_openwrt

Returns true if the target system is an OpenWrt System.

is_gentoo

Returns true if the target system is a Gentoo System.

is_arch

task "foo", "server1", sub {
  if(is_arch) {
    # do something on a arch system
  }
};

is_void

Returns true if the target system is a Void Linux system.