{"record":{"id":"a042377829c51b8d","repo":"peass-ng/PEASS-ng","slug":"a-password-cannot-be-supplied-when-specifying-task","errorCode":null,"errorMessage":"A password cannot be supplied when specifying TaskLogonType.ServiceAccount.","messagePattern":"A password cannot be supplied when specifying TaskLogonType\\.ServiceAccount\\.","errorType":"exception","errorClass":"ArgumentException","httpStatus":null,"severity":"error","filePath":"winPEAS/winPEASexe/winPEAS/TaskScheduler/TaskFolder.cs","lineNumber":497,"sourceCode":"        /// TaskService.Instance.RootFolder.RegisterTaskDefinition(\"TaskName\", taskDefinition, TaskCreation.CreateOrUpdate, \"userDomain\\\\userName\", \"userPassword\", TaskLogonType.Password, @\"O:BAG:DUD:(A;ID;0x1f019f;;;BA)(A;ID;0x1f019f;;;SY)(A;ID;FA;;;BA)(A;;FR;;;BU)\");\n        /// ]]></code></example>\n        public Task RegisterTaskDefinition([NotNull] string path, [NotNull] TaskDefinition definition, TaskCreation createType, string userId, string password = null, TaskLogonType logonType = TaskLogonType.S4U, string sddl = null)\n        {\n            if (definition.Actions.Count < 1 || definition.Actions.Count > 32)\n                throw new ArgumentOutOfRangeException(nameof(definition.Actions), @\"A task must be registered with at least one action and no more than 32 actions.\");\n\n            userId ??= definition.Principal.Account;\n            if (userId == string.Empty) userId = null;\n            User user = new User(userId);\n            if (v2Folder != null)\n            {\n                definition.Actions.ConvertUnsupportedActions();\n                if (logonType == TaskLogonType.ServiceAccount)\n                {\n                    if (string.IsNullOrEmpty(userId) || !user.IsServiceAccount)\n                        throw new ArgumentException(@\"A valid system account name must be supplied for TaskLogonType.ServiceAccount. Valid entries are \"\"NT AUTHORITY\\SYSTEM\"\", \"\"SYSTEM\"\", \"\"NT AUTHORITY\\LOCALSERVICE\"\", or \"\"NT AUTHORITY\\NETWORKSERVICE\"\".\", nameof(userId));\n                    if (password != null)\n                        throw new ArgumentException(@\"A password cannot be supplied when specifying TaskLogonType.ServiceAccount.\", nameof(password));\n                }\n                /*else if ((LogonType == TaskLogonType.Password || LogonType == TaskLogonType.InteractiveTokenOrPassword ||\n\t\t\t\t\t(LogonType == TaskLogonType.S4U && UserId != null && !user.IsCurrent)) && password == null)\n\t\t\t\t{\n\t\t\t\t\tthrow new ArgumentException(\"A password must be supplied when specifying TaskLogonType.Password or TaskLogonType.InteractiveTokenOrPassword or TaskLogonType.S4U from another account.\", nameof(password));\n\t\t\t\t}*/\n                else if (logonType == TaskLogonType.Group && password != null)\n                {\n                    throw new ArgumentException(@\"A password cannot be supplied when specifying TaskLogonType.Group.\", nameof(password));\n                }\n                // The following line compensates for an omission in the native library that never actually sets the registration date (thanks ixm7).\n                if (definition.RegistrationInfo.Date == DateTime.MinValue) definition.RegistrationInfo.Date = DateTime.Now;\n                var iRegTask = v2Folder.RegisterTaskDefinition(path, definition.v2Def, (int)createType, userId ?? user.Name, password, logonType, sddl);\n                if (createType == TaskCreation.ValidateOnly && iRegTask == null)\n                    return null;\n                return Task.CreateTask(TaskService, iRegTask);\n            }\n","sourceCodeStart":479,"sourceCodeEnd":515,"githubUrl":"https://github.com/peass-ng/PEASS-ng/blob/53fb989abc2219826385683a6fee826bd6cd38d6/winPEAS/winPEASexe/winPEAS/TaskScheduler/TaskFolder.cs#L479-L515","documentation":"Argument-validation guard inside RegisterTaskDefinition: it rejects a registration that passes a non-null password together with TaskLogonType.ServiceAccount. A service account (e.g. SYSTEM, LOCALSERVICE) authenticates by its own identity, so the COM API accepts no credential; supplying one means the caller combined the wrong userId/logonType/password inputs.","triggerScenarios":"Thrown at winPEAS/winPEASexe/winPEAS/TaskScheduler/TaskFolder.cs:497 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Pass null (or omit the password argument) when logonType is TaskLogonType.ServiceAccount","Use a valid service account name such as SYSTEM, NT AUTHORITY\\LOCALSERVICE or NT AUTHORITY\\NETWORKSERVICE as the userId and drop the password","If a password is genuinely required, switch logonType to TaskLogonType.Password or TaskLogonType.InteractiveTokenOrPassword and supply the matching account"],"exampleFix":null,"handlingStrategy":"validation","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"53fb989abc2219826385683a6fee826bd6cd38d6","analyzedAt":"2026-09-02T04:25:09.259Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-09T11:17:12.671Z"}